標籤:
1,下面的範例是給表格UITableView添加儲存格移動功能:
(1)給表格添加長按功能,長按後表格進入編輯狀態 (2)在編輯狀態下,可以看到儲存格後面出現拖動按鈕 (3)滑鼠按住拖動按鈕,可以拖動儲存格到任意位置(4)拖動完畢後,還會觸發TabelView對應的代理事件
2,如下:
3,代碼如下
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
import UIKit class ViewController: UIViewController,UITableViewDelegate, UITableViewDataSource,UIGestureRecognizerDelegate { var tableView:UITableView? var ctrlnames:[String] = ["UILabel 標籤","UIButton 按鈕","UIDatePiker 日期選取器", "UITableView 表格視圖"] override func viewDidLoad() { super.viewDidLoad() //建立表視圖 self.tableView = UITableView(frame: UIScreen.mainScreen().applicationFrame, style:UITableViewStyle.Plain) self.tableView!.delegate = self self.tableView!.dataSource = self //建立一個重用的儲存格 self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell") self.view.addSubview(self.tableView!) //綁定對長按的響應 var longPress = UILongPressGestureRecognizer(target:self, action:Selector("tableviewCellLongPressed:")) //代理 longPress.delegate = self longPress.minimumPressDuration = 1.0 //將長按手勢添加到需要實現長按操作的視圖裡 self.tableView!.addGestureRecognizer(longPress) } //在本例中,只有一個分區 func numberOfSectionsInTableView(tableView: UITableView!) -> Int { return 1; } //返回表格行數(也就是返回控制項數) func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.ctrlnames.count } //建立各單元顯示內容(建立參數indexPath指定的單元) func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { //為了提供表格顯示效能,已建立完成的單元需重複使用 let identify:String = "SwiftCell" //同一形式的儲存格重複使用,在聲明時登入 let cell = tableView.dequeueReusableCellWithIdentifier(identify, forIndexPath: indexPath) as UITableViewCell cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator cell.textLabel?.text = self.ctrlnames[indexPath.row] return cell } //長按表格 func tableviewCellLongPressed(gestureRecognizer:UILongPressGestureRecognizer) { if (gestureRecognizer.state == UIGestureRecognizerState.Ended) { println("UIGestureRecognizerStateEnded"); //在正常狀態和編輯狀態之間切換 if(self.tableView!.editing == false){ self.tableView!.setEditing(true, animated:true) } else{ self.tableView!.setEditing(false, animated:true) } } } //在編輯狀態,可以拖動設定cell位置 func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } //移動cell事件 func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { if fromIndexPath != toIndexPath{ //擷取移動行對應的值 var itemValue:String = ctrlnames[fromIndexPath.row] //刪除移動的值 ctrlnames.removeAtIndex(fromIndexPath.row) //如果移動地區大於現有行數,直接在最後添加移動的值 if toIndexPath.row > ctrlnames.count{ ctrlnames.append(itemValue) }else{ //沒有超過最大行數,則在目標位置添加剛才刪除的值 ctrlnames.insert(itemValue, atIndex:toIndexPath.row) } } }} |
Swift - 給表格添加移動儲存格功能(拖動行)