已完成章節(jié)索引
用Swift寫圍棋App-00序
用Swift寫圍棋App-01準(zhǔn)備工作
用Swift寫圍棋App-02建立工程
用Swift寫圍棋App-03StoryBoard
用Swift寫圍棋App-04棋盤
用Swift寫圍棋App-05初識棋譜
用Swift寫圍棋App-06解析器初版
用Swift寫圍棋App-07解析器改進(jìn)
用Swift寫圍棋App-08繪制每一手棋
用Swift寫圍棋App-09分片算法
用Swift寫圍棋App-10氣的算法
用Swift寫圍棋App-11算法改進(jìn)
基本上,我的構(gòu)思是這樣的:
A: 應(yīng)用啟動后,進(jìn)入一個棋譜列表,可以看到一些可用的棋譜;
B: 每一個棋譜,會有一個標(biāo)題,比如“第一屆日本最強(qiáng)者決定戰(zhàn)吳清源對高川格”,還有一些小字說明額外的信息,比如“對弈時間:1957年2月20日”;
C: 用戶選中一行后,應(yīng)用會加載相應(yīng)的棋譜;
從這個設(shè)想來看,一個典型的UINavigatioController + UITableView似乎可以構(gòu)成主要的UI。
打開Main.stroyboard,選中之前Xcode自動創(chuàng)建的那個ViewController,在菜單中找到Editor->Embed In -> Navigation Controller。
在這個ViewController上拖一個UITableView;
再在StoryBorad中加入一個新的UIViewController;
在 UITableView中選中ContentView,按住control + command鍵,拖到新的ViewController上,建一個Show的Segue。
將XCode創(chuàng)建的ViewController改名叫HomeViewController,就是步驟A的界面了。
然后新建一個UIViewController的子類,命名為GameViewController,就是用來在步驟C中加載棋譜的了。
現(xiàn)在的Stroyboard是這個樣子的:

運(yùn)行一下,執(zhí)行成功,界面是空的。
接下來,讓我們弄點(diǎn)測試數(shù)據(jù),讓界面豐滿起來。
建一個新的Swift類,命名為GameInfo,代碼如下:
import Foundation
class GameInfo: NSObject {
var title: String = ""
var metaInfo: String = ""
}
然后在HomeViewController中敲入如下代碼:
import UIKit
public class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var _games:[GameInfo] = [GameInfo]()
@IBOutlet weak var _tblGames:UITableView!
override public func viewDidLoad() {
super.viewDidLoad()
let game1 = GameInfo()
game1.title = "第一屆日本最強(qiáng)者決定戰(zhàn)吳清源對高川格"
game1.metaInfo = "對弈時間:1957年2月20日"
_games.append(game1)
let game2 = GameInfo()
game2.title = "MarkNote對弈李昌鎬"
game2.metaInfo = "對弈時間:2015年12月28日"
_games.append(game2)
_tblGames.delegate = self
_tblGames.dataSource = self
}
@objc public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return _games.count
}
@objc public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let row = indexPath.row
let game = _games[row]
let cell = _tblGames.dequeueReusableCellWithIdentifier("GameCell", forIndexPath: indexPath)
cell.textLabel?.text = game.title
cell.detailTextLabel?.text = game.metaInfo
return cell
}
}
注意,這里因?yàn)閁ITableViewDataSource, UITableViewDelegate是Objective-c中定義的,所以這個HomeViewController必須聲明為public的。否則一堆錯誤。
修改完畢,運(yùn)行是這個樣子的:

看起來很好,將代碼push到 github上
https://github.com/marknote/GoTao