禁用didSelectRowAtIndex --- tap - >保持触摸 - >开始编辑 - >结束编辑 - >释放触摸

时间:2016-07-21 06:34:13

标签: ios objective-c iphone uitableview

如果在编辑willSelectRowAtIndexPath时要禁用didSelectRowAtIndex,我已经看到建议在UITableViewCell中返回nil的帖子。
但我的问题是先点击单元格,然后不释放触摸,使用滑动开始和结束编辑 理想情况下,一旦单元格处于编辑模式,willSelectRowAtIndexPath将阻止didSelectRowAtIndex。但在这种情况下,didSelectRowAtIndex首先被解雇而没有释放触摸,单元格开始和结束编辑而没有任何操作。
在这种情况下,在结束编辑时(didEndEditingRowAtIndexPath之后),didSelectRowAtIndex被触发。我怎么能避免这个?

2 个答案:

答案 0 :(得分:1)

我创建了自定义单元格并添加了一些逻辑,以便在选择单元格之前查看单元格是否正在编辑,它对我有用!

这是代码:
表格视图方法 -

func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! CustomTableViewCell
    if cell.cellWasEditing() { 
        //this is main logic
        return nil
    }
    return indexPath
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}

自定义单元格 -

@IBOutlet weak var _customLbl: UILabel!

private var prevEditingState = UITableViewCellStateMask.DefaultMask
private var wasEdititng = false

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    // Configure the view for the selected state
}

override func didTransitionToState(state: UITableViewCellStateMask) {

    if prevEditingState == UITableViewCellStateMask.ShowingEditControlMask || prevEditingState == UITableViewCellStateMask.ShowingDeleteConfirmationMask {
        wasEdititng = true
    }
    else {
        wasEdititng = false
    }
    prevEditingState = state
}

//MARK: Public Methods
func setCellIndexLabel(index: Int) {
    _customLbl!.text = String(index)
}

func cellWasEditing() -> Bool {
    if wasEdititng {
        wasEdititng = false
        return true
    }
    return false
}

我希望这能解决你的问题!

答案 1 :(得分:-1)

您可以尝试使用自定义单元格,并在其上添加UIPanGestureRecognizer。

然后监控手势状态,并在状态结束时执行您想要的操作。