让" didSelectRowAtIndexPath"仅在单元格中的图像被点击时调用(但是以其他方式调用)?

时间:2015-08-04 18:05:46

标签: ios swift uitableview didselectrowatindexpath

我想在我的UITableViewCell上放置一个图像,并在用户点击单元格时将单元格移动到详细视图控制器。但是,当用户点击仅放置在单元格的一部分上的图像时,我还想让单元格不移动到细节VC。该单元格如下所示:

[cell.textLabel     myImage    accessoryType] <- UITableViewCell

然而,当我像下面这样实现我的代码时,当用户点击单元格时,必须将用户移动到细节VC,即使她轻拍图像覆盖的小部分。是否可以在点击图像时禁用didSelectRowAtIndexPath:

的tableView:didSelectRowAtIndexPath方法:

var cell = self.tableView.dequeueReusableCellWithIdentifier(CellReuseIdentifier, forIndexPath: indexPath) as! UITableViewCell

var list = listArray[indexPath.row]
cell.textLabel?.text =  list.name

cell.accessoryType = UITableViewCellAccessoryType.DetailButton
let image = UIImage(named: "myImage.png")
var imageView = UIImageView(image: image)
imageView.frame = CGRectMake(280, 4, 36, 36)
cell.addSubview(imageView)

return cell

我尝试了imageView.userInteractionEnabled = false,但结果并没有改变。

另请注意,图片不是附件视图,因为我还想使用附件类型(两者都不能使用),因此您无法使用tableView:accessoryButtonTappedForRowWithIndexPath:委托方法。

2 个答案:

答案 0 :(得分:4)

您有三种方法可以完成它:

  1. UITapGestureRecognizer添加到您的UIImageView。如果您点按UITableView,它会强制didSelectRowAtIndexPath不要拨打UIImageView

  2. 如果您使用的是故事板,则可以覆盖override func shouldPerformSegueWithIdentifier(identifier: String!, sender: AnyObject!) -> Bool并避免使用。

  3. 或者@DuncanLowrie说:

      

    使用UIButton代替图像视图,或使用按钮覆盖图像。该按钮不必执行任何操作,但会拦截触摸。

答案 1 :(得分:2)

实现此目的的一种方法是使用UIButton而不是图像视图,或使用按钮覆盖图像。按钮不必做任何事情,但会拦截触摸。