在 didSelectRowAtIndexPath 之前调用 viewDidLoad

Posted

技术标签:

【中文标题】在 didSelectRowAtIndexPath 之前调用 viewDidLoad【英文标题】:viewDidLoad being called before didSelectRowAtIndexPath 【发布时间】:2012-01-26 09:37:05 【问题描述】:

我有 viewDidLoad(下一个 tableView)在 didSelectRowAtIndexPath(当前 tableView)之前被调用。

我正在使用“单例”来保存我的模型,到目前为止,这一直运行良好。我试图通过didSelectRowAtIndexPath 中的变量设置,将didSelectRowAtIndexPath 中当前表中选择的行传递给目标tableview(它们由情节提要中的segue 链接)。

但是,在我设置行号之前,会调用目标 tableviewviewDidLoaddidSelectRowAtIndexPath 稍后被调用,但到那时我已经(错误地)为目标表设置了我的数据。

【问题讨论】:

您可以为此发布一些代码吗? 是的,请发布一些代码来进一步解释这一点。在我看来,你的 segue 出了点问题(如果你确实有一个),请提供更多详细信息。 【参考方案1】:

使用 segue 时,您不需要 didSelectRowAtIndexPath:。您只需将 segue 链接到 IB 中的单元格。在代码中使用这个:

-(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;

【讨论】:

谢谢蒙迪,完美。我开始认为我做了一些非常顽皮的事情。为什么我不需要使用 didSelectRowAtIndexPath? 如果您愿意,那是传统方法。您可以在 IB 中删除您的 segue 并改用 didSelectRowAtIndexPath。当使用 segues 时,它根本就没有必要——或者你可以用它做不同的事情。 我想发送选中的行数据,怎么发送? 如上所述,第 3 行。

以上是关于在 didSelectRowAtIndexPath 之前调用 viewDidLoad的主要内容,如果未能解决你的问题,请参考以下文章

tableView - didSelectRowAtIndexPath 未调用

在 didSelectRowAtIndexPath 中呈现缓慢的 ViewController

我可以麻烦UITableViewDelegate的didSelectRowAtIndexPath:吗?

在 didselectRowAtIndexPath 之后 UITableView 无法滚动底部

在 tableView 上使用 CustomCell,如何调用 didSelectRowAtIndexPath?

didSelectRowAtIndexPath 不会在 ViewController 中触发