UITableViewCell setSelected:在iPad上调用两次动画

Can*_*ğlu 7 cocoa-touch uitableview ios ios7

我有一个自定义UITableViewCell在我的iPhone应用程序,我有一个自定义的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];
    }
}
Run Code Online (Sandbox Code Playgroud)

OlD*_*Dor 5

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

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

现在,在任何单元格上单击1可为您提供:

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

  • 为什么这是正常行为? (2认同)

Wan*_*hoi 0

- (void)setSelected:(BOOL)selected你的消息来源是在哪里调用的?

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

用这个代替

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