Swift - 給表格添加移動儲存格功能(拖動行)

來源:互聯網
上載者:User

標籤:

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 - 給表格添加移動儲存格功能(拖動行)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.