UITableViewCell setSelected:animated 在 iPad 上调用了两次

Posted

技术标签:

【中文标题】UITableViewCell setSelected:animated 在 iPad 上调用了两次【英文标题】:UITableViewCell setSelected:animated called twice on iPad 【发布时间】:2014-01-08 12:13:58 【问题描述】:

我的 iPhone 应用程序上有一个自定义的 UITableViewCell,我有一个自定义的 setSelected:animated 方法。我的应用程序在 iPhone 上运行良好,但是,我开始将我的应用程序移植到 iPad。我已经复制了完全相同的情节提要,没有进行任何更改,但是现在当我选择我的单元格时,我的 setSelected:animated 方法被调用了两次(使用相同的参数)。我可以通过检查是否有 iPad 等来“处理”这种情况,但这是一种不好的做法。它在 iPhone 上被调用一次但在 iPad 上被调用两次的原因可能是什么? (均为 ios 7.0.3)表格视图的属性完全相同(我复制了 iPhone 故事板文件)。

以下是相关代码:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

    isSelected = selected;
    [self setNeedsDisplay];
    if(selected)
        SocialMatchAppDelegate *del = (SocialMatchAppDelegate*)[UIApplication sharedApplication].delegate;
        del.selectedUser = self.user;
        [del.resultViewController performSegueWithIdentifier:@"viewProfile" sender:self];
    

【问题讨论】:

你能发布你的代码进行分析吗? 我添加了setSelected:animated代码 @canpoyrazoğlu 该代码没有任何问题,因此我认为这与情节提要有关。 我已经从 iPhone 复制了确切的故事板。按文件复制粘贴。它(表格视图或表格视图单元格)在 iPhone 和 iPad 上的行为不同,即使使用完全相同的 iOS 版本(我使用的是模拟器) 我有完全相同的问题,在 swift 中完成了类似的代码。我还有一个通用版本的故事板,所以 iPhone 和 iPad 的故事板都相同,我还发现 setSelected 在 iPad 上被调用了两次 - 如果我将模拟器更改为 iPhone(任何一个).. 问题不存在.. 避免双重选择集的最佳方法是什么? 【参考方案1】:

如果您使用的是 iPad,我想这是正常现象。

为了停止获取多个“setSelected:YES”或多个“setSelected:NO”,您所要做的就是:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

现在,单击任何单元格即可:

setSelected 的 1 个条目:YES 动画:NO tableView 的 1 个条目:didSelectRowAtIndexPath: setSelected 的 1 个条目:NO 动画:YES

【讨论】:

为什么这是正常现象?【参考方案2】:

- (void)setSelected:(BOOL)selected 在您的来源中调用了哪里?

如果在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

改用这个

[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];

【讨论】:

我没有调用它。我只是通过触摸它来选择它:)

以上是关于UITableViewCell setSelected:animated 在 iPad 上调用了两次的主要内容,如果未能解决你的问题,请参考以下文章

如何让 UITableViewCell 在自定义 UIView 子类上调用 setHighlighted 或 setSelected?

UITableViewCell setSelected:animated 在 iPad 上调用了两次

iPhone - 是不是可以覆盖 UITableViewCell setSelected:animated

在 UITableViewCell 的 setSelected 和 setHighlighted 方法中创建自定义附件视图会导致我的其余代码被忽略

子类化 UItableViewCell 选择

UITableViewCell 设置最初选择