iOS7问题与模态视图控制器segue来自自定义单元格选择

时间:2013-10-09 21:29:00

标签: ios uitableview ios7 segue uistoryboardsegue

最终编辑

经过进一步调查后,我认为最好重新提交有关特定问题的更多信息。

此问题似乎仅在iOS7上发生。我已经在iOS6上测试了,这没有问题。

- 设置 设置是你有一个UIViewController(例如第一个VC),它拥有一个tableView并且是数据源/委托。 当选择/点击tableView中的单元格时,您将执行到第二视图控制器的segue(此时可能为空)。

问题

问题是segue不会立即发生。在预期的一秒钟内。在第二个视图控制器中没有传递segue或正在加载的任何数据,因此您希望它是即时的。

有时,这样可以正常工作而没有任何问题。 其他时候,您将单击该单元格,不会发生任何事情。

- 注意趋势 我注意到的是,当'问题'发生时。模拟器/设备将等到下一分钟开始,然后强制通过模态视图控制器的负载。 要么 出现问题时,您可以再次单击/点击设备屏幕上的任何位置以“强制”加载。

这个问题可以在一个新项目中重现,只有基础知识。我有uploaded a sample project zip that includes this

附加代码(如果需要)

我有自定义单元格设置。选择单元格后,执行以下操作:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%s",__PRETTY_FUNCTION__);

    if (indexPath.section == 0) {
        [self performSegueWithIdentifier:@"selectGameTurnDiff" sender:self];
    } 
}

然后我在prepareForSegue中有以下内容:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSLog(@"%s",__PRETTY_FUNCTION__);
    [super prepareForSegue:segue sender:sender];
}

登录

以下是一些显示此示例的示例: 运行1
2013-10-09 23:54:09.855 App [14954:a0b] - [FirstViewController tableView:didSelectRowAtIndexPath:]
2013-10-09 23:54:09.857 App [14954:a0b] - [FirstViewController prepareForSegue:sender:]
2013-10-09 23:55:00.004 App [14954:a0b] - [SecondViewController viewDidLoad]
2013-10-09 23:55:00.004 App [14954:a0b] - [SecondViewController viewWillAppear:]
2013-10-09 23:55:00.511 App [14954:a0b] - [SecondViewController viewDidAppear:]

运行2
2013-10-09 23:56:21.900 App [14954:a0b] - [FirstViewController tableView:didSelectRowAtIndexPath:]
2013-10-09 23:56:21.901 App [14954:a0b] - [FirstViewController prepareForSegue:sender:]
2013-10-09 23:57:00.003 App [14954:a0b] - [SecondViewController viewDidLoad]
2013-10-09 23:57:00.003 App [14954:a0b] - [SecondViewController viewWillAppear:]
2013-10-09 23:57:00.508 App [14954:a0b] - [SecondViewController viewDidAppear:]

运行3
2013-10-09 23:57:43.387 App [14954:a0b] - [FirstViewController tableView:didSelectRowAtIndexPath:]
2013-10-09 23:57:43.388 App [14954:a0b] - [FirstViewController prepareForSegue:sender:]
2013-10-09 23:58:00.004 App [14954:a0b] - [SecondViewController viewDidLoad]
2013-10-09 23:58:00.004 App [14954:a0b] - [SecondViewController viewWillAppear:]
2013-10-09 23:58:00.510 App [14954:a0b] - [SecondViewController viewDidAppear:]

1 个答案:

答案 0 :(得分:3)

填充雷达苹果后回复说:

dispatch_async(dispatch_get_main_queue(), ^{});

到下面的方法的结尾,这就是诀窍:

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

在显示控制器的方法中,您可以安排无操作   块会强制runloop旋转,没有延迟。

雷达参考号:15196237,请随意提交另一份并参考此内容。