2

我有一个 tableview,我在它的单元格中插入了一个 segue。我想给定一个条件,启用或禁用单元格。

这是我里面的代码didSelectRowAtIndexpath

if (condition) {
    NSLog(@"Nothing);
} else {
    [self performSegueWithIdentifier:@"segueName" sender:tableView];
}

但是 segue 每次都会被调用,即使我确实看到了NSLog打印。

这里的一些答案说我应该将segue放在视图控制器中,但在情节提要中我不能这样做,我只能将它放入单元格中。

我错过了什么?

4

1 回答 1

3

您是否也有从单元格到界面生成器中的下一个场景的转场?如果是这样,无论做什么,都会调用didSelectRowAtIndexPath它。

有两种可能的方法:

  1. 如果iOS 6-only,你可以didSelectRowAtIndexPath完全消除,在单元格和下一个场景之间放置segue,然后实现shouldPerformSegueWithIdentifier并将你的条件逻辑放在那里,例如

    - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
    {
        if ([identifier isEqualToString:@"segueName"])
        {
            if (condition)
                return NO;
        }
        return YES;
    }
    
  2. 如果您需要与 iOS 5 兼容,您应该删除单元格和下一个场景之间的 segue,但让它在视图控制器之间移动(即,您control- 从场景底部栏中的第一个视图控制器图标拖动到下一个场景)。这样,segue 被定义,但没有连接到单元格。您didSelectRowAtIndexPath可以使用您在问题中建议的条件逻辑:

    场景之间的切换

于 2013-01-25T22:46:30.817 回答