Ios SetHighlighted在触地而非触地时被调用

Ios SetHighlighted在触地而非触地时被调用,ios,objective-c,uitableview,Ios,Objective C,Uitableview,是什么原因导致在触碰上而不是触碰下调用setHighlighted:animated:?我有一个非常小的子类UITableViewCell,只包含以下方法: - (void)awakeFromNib - (void)updateWithStuff:(NSString *)stuff - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated 但是setHighlighted:animated:在触地而不是触地时被调用。

是什么原因导致在触碰上而不是触碰下调用
setHighlighted:animated:
?我有一个非常小的子类
UITableViewCell
,只包含以下方法:

- (void)awakeFromNib

- (void)updateWithStuff:(NSString *)stuff

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
但是
setHighlighted:animated:
在触地而不是触地时被调用。 我试过了

self.selectionStyle = UITableViewCellSelectionStyleNone;
以及

self.tableView.delaysContentTouches = NO;
没有说明调用setHighlighted的确切时间,但少数Stackoverflow答案似乎一致认为它是在触地时首先调用的,并且
setHighlighted:animated:
稍后会调用

我的信息是否不正确,以及是否有新的/更好的方式获取手机中的触地事件

编辑:

我已尝试删除与视图相关的任何UIgestureRecognitor。 我还尝试使用默认的UITableViewCell和默认的选择样式,得到了相同的结果。它会在您发布时突出显示

setHighlighted在触地而非触地时被调用

实际上,它在两个方面都被调用:

  • 触按时突出显示
    =
    true
  • 用突出显示的
    进行润色时
    =
    false
此外,在显示时,新单元格将被发送
setHighlighted
,而
highlighted
=
false
。请参见下面动画中消息的计时:


你在呼叫超级吗

class TableViewCell: UITableViewCell {
    var row = 0

    override func setHighlighted(_ highlighted: Bool, animated: Bool) {
        super.setHighlighted(highlighted, animated: animated)
        print("setHighlighted row \(1+row): \(highlighted) animated: \(animated)")
    }
}

我相信这就是它的工作原理。在iOS中,操作通常在触碰时触发,而不是触碰时触发。“选择”操作可能与此相同。@Duncac在本演示中,它的工作方式与我预期的一样(在触地时调用setHighlighted)。不正确:两个都会调用它。感谢您指出这一点,但问题仍然存在。似乎这两个电话,对的和错的,都发生在润色上。如果我发布了一个示例项目,对触地没有任何帮助吗?不,我已经在上面发布了一个示例项目,它在其中按预期工作。我只是在寻找为什么它不能像预期的那样工作的原因,因为我不能发布我所有的代码。我没有展示过
setHighlighted
在触地和触地时都会被调用吗?你有,我知道它应该是这样工作的。但正如我试图解释的那样,在我的案例中,它只会在润色时被调用。不着陆。这是我的问题。