2024-11-27
按+号搜索"Table View"。
信息展示搜索"Table View Cell"
实际上就是delegate的实现。
viewDidLoad里面完成delegate,这里是dataSource
register用于注册我们后面要使用的cell。用nibName来区分是哪个风格cell,为的是寻找对应的.xlb文件(一般也是Class的名字),这个可以复用。而identifier则不可以复用。一个nibName可以对应多个identifier。
tableView.dataSource = self
tableView.register(UINib(nibName: K.cellNibName, bundle: nil), forCellReuseIdentifier: K.cellIdentifier)
最后面创建一个extension来用protocol:
//MARK: - UITableViewDataSource
extension ChatViewController: UITableViewDataSource{
//有多少行
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return messages.count
}
//用哪个cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: K.cellIdentifier, for:indexPath)
cell.textLabel?.text = messages[indexPath.row].body
return cell
}
}
为什么用DataSource这个protocol?因为是输入数据。
如果需要在选择数据时做相应的操作,才需要用Delegate这个protocol。
storyboard里面选中cell,将selection
设置为none
即可。现在用户就不可以选择每个cell了,这是聊天软件的正常行为,而不是像信息软件或者邮件软件那样。
非常简单,不需要delegate和protocol。
import UIKit
class TodoListViewController: UITableViewController {
let itemArray = ["Find Mike", "Buy Eggos", "Destory Demogorgon"]
override func viewDidLoad() {
super.viewDidLoad()
}
//每个分区section有多少行row
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return itemArray.count
}
//用哪个cell;indexPath即对应上面的row
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ToDoItemCell", for: indexPath)
cell.textLabel?.text = itemArray[indexPath.row]
return cell
}
}
storyboard中选中cell - 属性界面 - Accessory - Checkmark
swift 如何添加+按钮?
添加bar Button,将System Item属性改为Add
。