在viewWillAppear之前调用popToRootViewController

时间:2014-05-22 04:34:58

标签: ios uitableview didselectrowatindexpath poptoviewcontroller

我有一个UITableviewController,当选择一行时,我想回弹到我的rootViewController并让它在表格视图中显示该行的文本。现在正在发生的事情是我的常规视图控制器中的viewWillAppear在调用popToRootViewController函数之前被调用,所以当它进入常规视图控制器时它不会显示文本。我也尝试过使用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它工作正常,问题是选择一行,我不知道为什么?< / p>

提前感谢您的帮助。我真的很感激。

1 个答案:

答案 0 :(得分:0)

事件处理是Delegate方法的一部分。您的数据源似乎是正确的,因为它显示了您的行。因此,您可能没有正确设置tableview的委托。如果您正在使用nib,则连接tableview的委托,或者如果您使用代码绘制tableview,只需检查_yourtable.delegate = self;是否设定。

另一个原因可能是如果在tableview单元格中有uiview,那么它可以将你的rowselection事件带走。

另外,如果您在tableview中设置了编辑功能,则可能无法调用didSelectRowAtIndex:方法...有关详细信息,请参阅here