在PopToRootViewController之后TableView不重新加载/刷新

时间:2013-06-11 20:55:34

标签: ios

我有一个从PLIST加载的tableivew ...工作很棒,我按下屏幕顶部的“+”图标来显示带有文本字段的详细视图...我将数据输入到文本字段中,然后按a按钮将数据写入PLIST ... PList已更新,现在我使用以下行弹出视图:(我这样做是在DetailView.m中)

[self.navigationController popToRootViewControllerAnimated:YES];

我有两种方法,建议从我尝试的方法中推荐:

- (void) navigationController:(UINavigationController *) navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{

    [self.tableView reloadData];

}

-(void) navigationController:(UINavigationController *) navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    [self.tableView reloadData];
}

我被告知这些是返回时会触发的方法,我已经在Debug中运行了,它们在返回时不会触发,我错过了什么?如果可以,请帮助,我在截止日期前,任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

我认为问题在于你没有将'rootViewController'设置为UINavigationController的委托。

为此,您必须使“根视图控制器”类符合UINavigationControllerDelegate协议。像这样:

在.h文件中:

@interface MyViewController : UIViewController <UINavigationControllerDelegate>

然后,在.m文件中,你必须实现UINavigationControllerDelegate方法(你已经拥有)

最后,在您的类中的某个地方(例如在viewWillLoad或viewDidLoad方法中),您必须将其设置为导航控制器委托,如下所示:

self.myNavigationController.delegate = self;

我对你的代码做了几个假设。一旦你发布更多我会更新我的答案。

希望这有帮助!

答案 1 :(得分:0)

听起来您正在使用“Master-Detail”设置。如果是这样,在iPad上masterViewcontroller和detailViewcontroller没有连接到同一导航控制器,因此您列出的两个UINavigationControllerDelegate方法将无法工作。但是,如果你的设置在同一个navigationController上有它们,那么在viewcontroller的viewDidLoad方法中你要重新加载表(masterVC),你需要添加

    self.navigationController.delegate = self;

然后在相应的.h文件中,您需要执行以下操作:

    @interface MasterViewController : UIViewController<UINavigationControllerDelegate>

答案 2 :(得分:0)

我认为你根本不需要那些导航委托方法。而是在包含该表的视图控制器中,在viewWillAppear上重新加载数据。

// MyTableContainingViewController.m

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
    [self.tableView reloadData];
}

如果视图控制器是UITableViewController的子类,则在第一次加载视图时执行重新加载,因此我的建议将在第一次生成额外的reloadData。你可以让它去或符合以下条件......

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    if (![self isBeingPresented]) {
        [self.tableView reloadData];
    }
}