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