0

我有一个UINavigationController层次结构,VC1 --> VC2。

VC1 有一个表格视图,当 VC2 完成工作时我需要重新加载它,所以 VC1 有以下代码:

-(void)viewWillAppear:(BOOL)animated
{
    [[self tableView] reloadData];
}

VC2 本质上是与服务器一起在 VC1 中创建一个新的表行。当按下 VC2 中的完成按钮时,我调用[navController popViewControllerAnimated:YES]. 所以这是从用户的角度发生的事情:

  1. 访问 VC2,用它为 VC1 中的表创建一个新行。按完成。

  2. 层次结构成功导航回 VC1,但tableview不会重新加载并显示新行。

  3. 但是,如果我然后导航到 VC2,并立即点击navController后退按钮,表格重新加载并显示新行。

那么为什么[tableview reload]在 3 上工作而不在 2 上工作呢?非常感谢。

==

响应下面提到的答案的更多代码:

在应用委托中:

    CWLandingVC *lvc = [[CWLandingVC alloc] init];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:lvc];
    [[self window] setRootViewController:navController];

在 VC0 中:

-(void)toSessionMgmtViewController
{
    TSessionMgmtViewController *tsmvc = [[TSessionMgmtViewController alloc] init];
    [[self navigationController] pushViewController:tsmvc animated:YES];
}

在 VC1 中:

- (IBAction)toCreateSessionView:(id)sender
{
    TCreateSession *cs = [[TCreateSession alloc] init];
    [[self navigationController] pushViewController:cs animated:YES];
}

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[self tableView] reloadData];
}

在 VC2 中:完成使用服务器...

    UINavigationController *navControler = [self navigationController];
    [navControler popViewControllerAnimated:YES];

此外,当 VC2 完成与服务器的工作时,它会更新 TSessions 的数据存储,称为 SessionListStore:

 - (TSession *)addSession:(NSString *)code withName:(NSString *) name qs:(int)qs
 {
     TSession *s = [[TSession alloc] initWithName:name code:code numberQuestions:qs];
     [_sessions setObject:s forKey:code];
     return s;
 }

其中 session 是 SessionListStore 中的 NSNutatbleDictionary。

提前非常感谢。

4

1 回答 1

0

编辑:解决方案是从服务器调用的完成块触发 reloadData 调用。

请检查这个答案,

返回时弹出 ViewController 不会调用 viewWillAppear

您是否将导航控制器添加到视图控制器或视图控制器到导航控制器?

此外,您可以将所需的视图控制器设置为导航控制器的委托并实现此方法。

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
于 2013-10-28T13:48:46.800 回答