iOS Swift checkmark for TableViewCell

当在一个html项目中我们经常需要用到checkbox来勾选需要的内容, 使用起来也很简单<input type="checkbox">, 在iOS中就没那么好用了, 总之跟打太极一样, 挺烦的, 不过不也没办法吗, 谁叫我们摊上 iOS 这事了呢, 是吧, 这里做下记录

新建一个Swift iOS 项目

老样子我们先新建一个single view application

参照这个就行了 http://huyaohui.com/2015/05/28/resignFirstResponder-close-keyboard/

新建一个tableviewcontroller

  • attribut inspector -> Style -> Basic

  • attribut inspector -> accessory -> Checkmark

  • attribut inspector -> Identifier填上CheckmarkCell(只是一个标识, 随便填, 但是一定要有意义)

  • 还有就是把默然的那个ViewController删了或者把入口拖到新建的TableViewController上

  • 这里就不贴图了, 看过我以前的Blog的或是在别的地方学过一点点的, 应该知道怎么弄的, (^__^) 嘻嘻……


念念碎: 其实你丫就是懒对吧~

新建TableViewController.swift

也没什么好说的, 这个都做过很多变的, 是在不想再写了, 可以看看我之前的Blog

关联

  • 把TableViewController这个类关联到storyboard中TableViewController中
  • 同样不知道的可以看我之前的Blog

关键代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import UIKit

class TableViewController: UITableViewController {

let checkmarkCacheData = [
"China",
"America",
"England",
"Japan",
"Germany"
]

var selectedItem:String?
var selectedItemIndex:Int? = 0

override func viewDidLoad() {
super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return checkmarkCacheData.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCellWithIdentifier("CheckmarkCell", forIndexPath: indexPath) as! UITableViewCell

cell.textLabel?.text = checkmarkCacheData[indexPath.row]

// 判断当前哪一行为选择状态
if indexPath.row == selectedItemIndex {
cell.accessoryType = .Checkmark
} else {
cell.accessoryType = .None
}

return cell
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

// 取消掉其他的选中状态
if let index = selectedItemIndex {
let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: index, inSection: 0))
cell?.accessoryType = .None
}

// 保存状态为全局
selectedItemIndex = indexPath.row
selectedItem = checkmarkCacheData[indexPath.row]

// 更新当前选中的行的状态
let cell = tableView.cellForRowAtIndexPath(indexPath)
cell?.accessoryType = .Checkmark
}

}

完成的样子

代码地址

MakeHui/SwiftBaseCodes

参考资料

Storyboards Tutorial in Swift: Part 2

总结

总得来说还是有点复杂的, 感学开发iOS项目就像是在堆积木一样, 零件都在那里, 完全看自己怎么拼了