Swift - Reorder UITableView cells

前端 未结 4 1419
悲哀的现实
悲哀的现实 2021-01-04 12:53

I do know that it\'s not too hard to do it in objective C , the problem is I\'m learning Swift by skipping Objective C.

https://developer.apple.com/library/ios/docu

相关标签:
4条回答
  • 2021-01-04 13:03

    Now there is a library for this reorder function: LPRTableView.

    0 讨论(0)
  • 2021-01-04 13:09

    Converted Above Answer methods in Swift 3.0

        // Determine whether a given row is eligible for reordering or not.
        func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
                return true
        }
    
    
        // Process the row move. This means updating the data model to correct the item indices.
        func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
            let item : Dictionary<String, Any> = arrInterval[sourceIndexPath.row]
            arrInterval.remove(at: sourceIndexPath.row)
            arrInterval.insert(item, at: destinationIndexPath.row)
        }
    
    0 讨论(0)
  • 2021-01-04 13:23

    I have tried this...here is the code

    In my example code there is button that starts the editing --- Action Method of the button -->

    @IBAction func editTableView (sender:UIBarButtonItem)
    {
        if listTableView.editing{
            //listTableView.editing = false;
            listTableView.setEditing(false, animated: false);
            barButton.style = UIBarButtonItemStyle.Plain;
            barButton.title = "Edit";
            //listTableView.reloadData();
        }
        else{
            //listTableView.editing = true;
            listTableView.setEditing(true, animated: true);
            barButton.title = "Done";
            barButton.style =  UIBarButtonItemStyle.Done;
            //listTableView.reloadData();
        }
    }
    

    And the related UITableView delegate methods -->

    // The editing style for a row is the kind of button displayed to the left of the cell when in editing mode.
    
            func tableView(tableView: UITableView!, editingStyleForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCellEditingStyle
            {
                if (false == self.editing && !indexPath){
                    return UITableViewCellEditingStyle.None;
                }
    
                if (self.editing && indexPath.row == countryList.count){
                    return UITableViewCellEditingStyle.Insert;
                }
                else{
                    return UITableViewCellEditingStyle.Delete;
                }
                //return UITableViewCellEditingStyle.Delete;
            }
    
            // Update the data model according to edit actions delete or insert.
            func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!)
            {
                if editingStyle == UITableViewCellEditingStyle.Delete{
                    countryList.removeAtIndex(indexPath.row);
                    self.editTableView(barButton);
                    listTableView.reloadData();
                }
                else if editingStyle == UITableViewCellEditingStyle.Insert{
                    countryList.append("New Country");
                }
            }
    
    
            // Determine whether a given row is eligible for reordering or not.
           func tableView(tableView: UITableView!, canMoveRowAtIndexPath indexPath: NSIndexPath!) -> Bool
            {
                return true;
            }
    
            // Process the row move. This means updating the data model to correct the item indices.
            func tableView(tableView: UITableView!, moveRowAtIndexPath sourceIndexPath: NSIndexPath!, toIndexPath destinationIndexPath: NSIndexPath!)
            {
                let item : String = countryList[sourceIndexPath.row];
                countryList.removeAtIndex(sourceIndexPath.row);
                countryList.insert(item, atIndex: destinationIndexPath.row)
            }
    

    You can also download full code Here

    0 讨论(0)
  • 2021-01-04 13:23

    All the same rules apply as in Objective-C. You set the table view data source and delegate just like you would in Objective-C.

    func tableView(tableView: UITableView!, canMoveRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
        return true // Yes, the table view can be reordered
    }
    
    func tableView(tableView: UITableView!, moveRowAtIndexPath fromIndexPath: NSIndexPath!, toIndexPath: NSIndexPath!) {
        // update the item in my data source by first removing at the from index, then inserting at the to index.
        let item = items[fromIndexPath.row]
        items.removeAtIndex(fromIndexPath.row)
        items.insert(item, atIndex: toIndexPath.row)
    }
    

    If you need finer grain control, you can also implement

    func tableView(tableView: UITableView!, targetIndexPathForMoveFromRowAtIndexPath sourceIndexPath: NSIndexPath!, toProposedIndexPath proposedDestinationIndexPath: NSIndexPath!) -> NSIndexPath! {
        …
    }
    
    0 讨论(0)
提交回复
热议问题