popToRootViewController 在 viewWillAppear 之前被调用
Posted
技术标签:
【中文标题】popToRootViewController 在 viewWillAppear 之前被调用【英文标题】:popToRootViewController is called before viewWillAppear 【发布时间】:2014-05-22 04:34:58 【问题描述】:I have a UITableviewController
and when a row is selected, I want to pop back to my rootViewController
and have it display the text of the row in table view.现在发生的事情是在调用popToRootViewController
函数之前调用了我的常规视图控制器中的viewWillAppear
,因此当它转到常规视图控制器时,它不会显示文本。我也尝试过使用viewDidAppear
,但它不起作用。这是我尝试过的代码:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NSLog(@"row was selected");
user[@"school"] = [[_objects objectAtIndex:indexPath.row] objectForKey:@"title"];
[[PFUser currentUser] saveInBackground];
[self.navigationController popToRootViewControllerAnimated:YES];
然后在常规视图控制器中:
- (void)viewWillAppear:(BOOL)animated
NSLog(@"will appear ran");
PFUser *currentUser = [PFUser currentUser];
self.userSchoolLabel.text = currentUser[@"school"];
我在控制台看到的是打印出来的
"will appear ran"
然后 “已选择行”
我该如何解决这个问题,如果我通过触摸另一个视图控制器上的按钮调用 popToRootViewController
方法,它工作正常,问题在于选择一行,我不知道为什么?
提前感谢您的帮助。我真的很感激。
【问题讨论】:
它是基于 stroyboard 的应用程序吗? 您的要求:选择一行 -> popToRootView (RegularViewController)。但是,RegularViewController 的 viewWillAppear 先发生,didSelectRow 发生在后吗?对吗? 我认为您发布的代码中没有任何内容。也许 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法中的某些东西? 你的单元格上是否有任何segues? 是的,这是基于故事板的应用程序,我也尝试过 viewDidAppear,但它会首先被调用,但它不应该调用它。不,我没有连接到单元格 【参考方案1】:事件处理是委托方法的一部分。您的数据源似乎是正确的,因为它为您显示了该行。所以,可能是你没有正确设置你的 tableview 的委托。如果您使用的是 nib,则连接您的 tableview 的委托,或者如果您使用代码绘制 tableview,只需检查 _yourtable.delegate =self;设置与否。
另一个原因可能是,如果 tableview 单元格中有 uiview,那么它可以带走您的 rowselection 事件。
另外,如果你在 tableview 中设置启用编辑,它可能不会调用 didSelectRowAtIndex: 方法...详情见here
【讨论】:
我没有使用 nib,并且代理连接到 tableView,并且 tableview 单元格中没有子视图,只有文本,并且不可编辑。以上是关于popToRootViewController 在 viewWillAppear 之前被调用的主要内容,如果未能解决你的问题,请参考以下文章
在 popToRootViewController 之后未调用 viewWillAppear 方法
从另一个选项卡调用 popToRootViewController
当 tableView 仍在滚动时 popToRootViewController 崩溃