JohnnyDark / IOS_Checklist

0 stars 0 forks source link

UITableViewController #2

Open JohnnyDark opened 4 years ago

JohnnyDark commented 4 years ago

table的样式: plain & grouped

table style

rows & cell

row: 表示data model中的一条数据 cell: app中的ui用于显示row的数据, cell被设计为可以重用 row cell

prototype cell

  1. cell上添加其他的ui如,UILabel
  2. 设置cell 的checkmark: accessory
  3. 设置cell的 reuse idendifier
  4. 给cell的 accessory type添加点击事件:设置 Accessory Action为 show
JohnnyDark commented 4 years ago

table view的代理

DataSource和delegate

**// MARK:- Table View Data Source**
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  return 1
}

override func tableView(_ tableView: UITableView,  cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let cell = tableView.dequeueReusableCell(withIdentifier: "ChecklistItem",  for: indexPath)
  return cell
}

**// MARK:- Table View Delegate**
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  tableView.deselectRow(at: indexPath, animated: true)
}

//Swipe to delete: 添加该方法后就激活了删除功能
func tableView(_ tableView: UITableView,  commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
  items.remove(at: indexPath.row)
  let indexPaths = [indexPath]
  tableView.deleteRows(at: indexPaths, with: .automatic)
}

//让cell不可被选中(storyboard中设置 selection 属性为 None也行)
override func tableView(_ tableView: UITableView,  willSelectRowAt indexPath: IndexPath) -> IndexPath? {
  return nil
  // 返回当前被选中cell的index path,当前cell被选中
  // 返回其他indexPath, 可以让其他cell被选中
 // 返回nil,让row不能被选中

}
JohnnyDark commented 4 years ago

在cell for row at方法中创建cell的方式

  1. 方式一:
    1. storyboard中,给table view添加一个prototype cell
    2. 给cell设置一个reuse identifier
    3. 调用方法: tableView.dequeueReusableCell(withIdentifier:for:) ---- 重用一个cell或者复制一个新的cell

      手动向table view中添加一行数据

    4. 创建数据对象
    5. 将数据对象添加到data model中
    6. 向table view中插入新行
      let newRowIndex = items.count
      let item = ChecklistItem()
      item.text = "I am a new row"
      items.append(item)
      let indexPath = IndexPath(row: newRowIndex, section: 0)
      let indexPaths = [indexPath]
      tableView.insertRows(at: indexPaths, with: .automatic)