tableView.addGestureRecognizer用于tableViewController的一个部分

时间:2016-04-24 07:28:22

标签: ios swift uitableview uigesturerecognizer

我是iOS新手,很快。我的tableView中有两个部分。我希望能够在第二部分执行longPressGesture,而不是第一部分,使用户能够在第二部分重新排序tableview单元格。我怎么能在swift中做到这一点?有人会在Swift中提供一个简单的示例代码吗?

感谢您的帮助,非常感谢!

1 个答案:

答案 0 :(得分:1)

如果你只是想重新排序移动特定的单元格,你可以添加一些按钮/动作来启用/禁用重新排序,你可以使用委托

您的代码可以是这样的:

//enable editing in the tableview to true when you want to enable reorder in your case may on the UILongPressGestureRecognizer action
//In viewDidLoad()
tblView.editing = true//set it to false to complete the reorder

委托方法可以像这样使用:

func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    return UITableViewCellEditingStyle.None
}

func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
    //get the reorder change in the path, you can do operation on the array 
    let itemToMove:String = arrData[fromIndexPath.row]//get the old path of item
    arrData.removeAtIndex(fromIndexPath.row)//remove item from old path
    arrData.insert(itemToMove, atIndex: toIndexPath.row)//at item at new path in array
}

func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {

//编写代码以允许在特定的section / indexpath中重新排序         if indexPath.section == 0 {             返回false         } else {             返回true         }         //如果您不希望该项目可以重新订购,则返回false。     }

func tableView(tableView: UITableView, targetIndexPathForMoveFromRowAtIndexPath sourceIndexPath: NSIndexPath, toProposedIndexPath proposedDestinationIndexPath: NSIndexPath) -> NSIndexPath {
    //check if the reorder is allow in the particular section/indexpath before the reorder is done, return the old path if you don't want to move at Proposed path
    if sourceIndexPath.section != proposedDestinationIndexPath.section {
        return sourceIndexPath
    } else {
        return proposedDestinationIndexPath
    }
}

UILongPressGestureRecognizer可以根据需求在tableview或tableview单元格上实现

let longpress = UILongPressGestureRecognizer(target:self, action:#selector(HomeScreenTableViewController.longPressGestureRecognized))
tblView.addGestureRecognizer(longpress)

func longPressGestureRecognized() {
    NSLog("Detected")
    tblView.editing = true
}

或在tableview单元格中使用与上述相同的方法

let longpress = UILongPressGestureRecognizer(target:self, action:#selector(HomeScreenTableViewController.longPressGestureRecognized))
    cell.addGestureRecognizer(longpress)