3

我有一个从 PLIST 加载的 tableivew ... 效果很好,我按屏幕顶部的“+”图标以显示带有文本字段的详细视图 ...我在文本字段中输入数据,然后按一个按钮来写数据到 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 中运行并且它们不会在返回时触发,我错过了什么吗?如果可以,请提供帮助,我在最后期限内,任何帮助将不胜感激。

4

3 回答 3

1

我认为问题在于您没有将“rootViewController”设置为UINavigationController.

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

在 .h 文件中:

@interface MyViewController : UIViewController <UINavigationControllerDelegate>

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

最后,在你的类中的某个地方(比如在 viewWillLoad 或 viewDidLoad 方法中)你必须将它设置为 Navigation Controller 委托,如下所示:

self.myNavigationController.delegate = self;

我对你的代码做了几个假设。一旦您发布更多内容,我将更新我的答案。

希望这可以帮助!

于 2013-06-11T21:10:25.777 回答
0

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

    self.navigationController.delegate = self;

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

    @interface MasterViewController : UIViewController<UINavigationControllerDelegate>
于 2013-06-12T02:17:01.377 回答
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];
    }
}
于 2013-06-12T02:36:10.857 回答