swift裡UITableView簡單的用法
阿新 • • 發佈:2019-01-03
/* self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellID) 需要和寫在cellForRow裡面的方法 tableView.dequeueReusableCellWithIdentifier(cellID, forIndexPath: indexPath) 配對使用 */ import UIKit class TestViewController: UIViewController ,UITableViewDelegate,UITableViewDataSource{ var tableView:UITableView! var dataArray = NSMutableArray() let cellID = "testCellID" var isEdit = false // 判斷tableview是否在編輯狀態 override func viewDidLoad() { super.viewDidLoad() self.title = "UITableView" // 資料來源陣列 self.dataArray = ["UIScrollView", "Xib自適應cell高度", "UICollectionView", "UIDatePicker", "UIAnimationViewController", "程式碼自定義cell", "XGBlockValueTest", "自定義View測試" ] // self.dataArray.addObject("heiehi") // 新增nav右側按鈕 self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "編輯", style: UIBarButtonItemStyle.Done, target: self, action:Selector("rightBarButtonItemClicked")) // 初始化UITableView self.tableView = UITableView(frame: CGRectMake(0.0, 0.0, KLScreenWidth, KLScreenHeight), style: .Plain) self.tableView.delegate = self self.tableView.dataSource = self self.tableView.rowHeight = 60.0 self.tableView.registerClass(UITableViewCell.classForCoder(), forCellReuseIdentifier: cellID)// cell的第二種寫法 註冊cell self.view.addSubview(self.tableView) // 去掉沒有資料的cell的分割線 self.tableView.tableFooterView = UIView() } // nav新增右按鈕 func rightBarButtonItemClicked(){ if isEdit { self.tableView.setEditing(false, animated: true) isEdit = false }else{ self.tableView.setEditing(true, animated: true) isEdit = true } } // cell內容的顯示 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { /* //cell的寫法1: var cell = tableView.dequeueReusableCellWithIdentifier(cellID) as? UITableViewCell if cell == nil { cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellID) } cell!.textLabel!.text = self.dataArray[indexPath.row] as? String return cell! */ // cell的寫法2: // let cell = tableView.dequeueReusableCellWithIdentifier(cellID, forIndexPath: indexPath) as! UITableViewCell cell.textLabel!.text = self.dataArray[indexPath.row] as? String return cell } // 返回的cell的行數 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.dataArray.count } // cell選中時的狀態 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: true) } // 設定返回的cell的高度 // func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { // return 60.0 // } // 可以被編輯 func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } // 確定編輯模式(預設是滑動刪除模式) func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { // 設定編輯模式為刪除 return UITableViewCellEditingStyle.Delete } // 具體編輯操作(預設刪除操作) func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { // 先移除資料來源資料 self.dataArray.removeObjectAtIndex(indexPath.row) // 再動態重新整理UITableView self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Top) } // 允許移動某行(排序) func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } // 實現排序 func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) { // 從陣列中讀取需要移動行的資料 let object:AnyObject = self.dataArray[sourceIndexPath.row] // 在陣列中先移除需要移動行的資料 self.dataArray.removeObjectAtIndex(sourceIndexPath.row) // 把需要移動的cell資料插到到想要移動的資料前面 self.dataArray.insertObject(object, atIndex: destinationIndexPath.row) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }