我有一个从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中运行了,它们在返回时不会触发,我错过了什么?如果可以,请帮助,我在截止日期前,任何帮助将不胜感激。
答案 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];
}
}