import UIKit /// TableViewDataSource展示 class YJTableViewDataSourceVC: UIViewController, UITableViewDataSource { /// 數據源 var data = [[Int]]() /// UITableView @IBOutlet weak var tableView: UITableView! // MARK: - view override func viewDidLoad() { super.viewDidLoad() // 以組演示,填充相關測試數據 var section = [Int]() for _ in 0..<5 { section.removeAll() for row in 0..<10 { section.append(row) } self.data.append(section) } } // MARK: - 開起和關閉tableView編輯狀態 @IBAction func onClickEdit(_ sender: AnyObject) { self.tableView.setEditing(!self.tableView.isEditing, animated: true) } // MARK: - UITableViewDataSource // MARK: 有幾組 func numberOfSections(in tableView: UITableView) -> Int { print(#function) return self.data.count } // MARK: 每一組有幾個元素 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { print(#function) return self.data[section].count } // MARK: 生成Cell func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { print(#function) var cell = tableView.dequeueReusableCell(withIdentifier: "cell") if cell == nil { cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell") } cell?.textLabel?.text = "\(self.data[indexPath.section][indexPath.row])" return cell! } // MARK: 組Header func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { print(#function) return "\(section)--Header" } // MARK: 組Footer func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? { print(#function) return "\(section)--Footer" } // MARK: 索引 func sectionIndexTitles(for tableView: UITableView) -> [String]? { print(#function) var sectionTitles = [String]() for i in 0..<self.data.count { sectionTitles.append("\(i)") } return sectionTitles } // MARK: 索引對應的組 func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int { print(#function) return Int(title) ?? 0 } // MARK: 能否編輯 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { print(#function) return true } // MARK: 增加和刪除 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { print(#function) if editingStyle == .delete { // Delete the row from the data source self.data[indexPath.section].remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .fade) } else if editingStyle == .insert { // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view } } // MARK: 能否移動 func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { print(#function) return true } // MARK: 移動cell func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) { print(#function) // 處理源數據 let sourceData = self.data[sourceIndexPath.section][sourceIndexPath.row] self.data[sourceIndexPath.section].remove(at: sourceIndexPath.row) self.data[destinationIndexPath.section].insert(sourceData, at: destinationIndexPath.row) } }