viewDidLoad在didSelectRowAtIndexPath之前被调用

3
我发现在当前tableViewdidSelectRowAtIndexPath方法被调用之前,下一个tableViewviewDidLoad方法已经被调用。
我使用单例来保存我的模型数据,目前这种方式一直运行良好。我试图通过在didSelectRowAtIndexPath方法中设置变量,将当前表格中所选行传递给目标tableView(它们由storyboard中的segue连接)。
然而,在我设置行号之前,目标tableViewviewDidLoad方法就被调用了。虽然didSelectRowAtIndexPath稍后会被调用,但此时我已经错误地为目标表格设置了数据。

你能否发布一些相关的代码? - Ernő Simonyi
是的,请发布一些代码以进一步解释。在我看来,你的segue(如果确实有)似乎出了一些问题,需要更多的细节。 - GWed
1个回答

5

在使用segue时,您不需要使用didSelectRowAtIndexPath:方法。只需在IB中将segue链接到单元格即可。在代码中使用以下内容:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
   CustomViewController *newVC = [segue destinationViewController];
   newVC.property = theDataYouWantToPass;
}

您可以通过传递的sender变量检索您的行。
UITableViewCell *cell = (UITableViewCell *) sender;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
NSInteger myRow = indexPath.row;

谢谢你,Mundi,非常完美。我开始觉得自己做了什么很不好的事情。但是为什么我不需要使用didSelectRowAtIndexPath呢? - Ian
那是传统的方法,如果你愿意的话,可以在IB中删除你的segue并使用didSelectRowAtIndexPath代替。当使用segues时,这是完全不必要的 - 或者你可以用它做不同的事情。 - Mundi
我希望发送所选行的数据,那么怎么做呢? - neobie
如上所述,第三行。 - Mundi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接