TableView不重新加载/刷新后PopToRootViewController

问题描述:

我有一个tableivew从PLIST中加载...工程好了,我按屏幕顶部的“+”图标以显示带有文本字段的detailview ...我输入数据在文本字段,并按下一个按钮,将数据写入到PList ... plist中被更新,现在我用下面的一行以弹出的观点:(我这样做是在DetailView.m)TableView不重新加载/刷新后PopToRootViewController

[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]; 
} 

我被告知th ese是返回时会触发的方法,我在Debug中运行,并且它们在返回时不会触发,我错过了什么?如果可以的话,请提供帮助,我将在截止日期前提供帮助,我们将不胜感激。

+0

你是否将“rootViewController”设置为“navigationController”的代表? – LuisCien

+0

这是在应用程序代表?我的意思是,rootView是MasterViewController,我在MasterViewController.h中实现了navigationController –

+0

是的,我认为这是问题所在。如果你可以请发布你的视图控制器的代码,你在哪里创建NavigationController – LuisCien

我相信问题是您没有将您的'rootViewController'设置为UINavigationController的代表。

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

在.h文件:

@interface MyViewController : UIViewController <UINavigationControllerDelegate> 

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

最后,在某处你类(像viewWillLoad或viewDidLoad中的方法),你必须将其设置为导航控制器委托,像这样:

self.myNavigationController.delegate = self; 

我做几个假设ABO取代你的代码。只要你张贴更多,我会更新我的答案。

希望这会有所帮助!

+0

谢谢刘易斯更接近 –

听起来好像您正在使用“主 - 细节”设置。如果是这样,在iPad上,masterViewcontroller和detailViewcontroller没有连接到同一个导航控制器,所以你列出的两个UINavigationControllerDelegate方法将不起作用。然而,如果你的设置有他们在同一个navigationController然后要重新加载表(masterVC)的视图控制器的viewDidLoad方法,您需要添加

self.navigationController.delegate = self; 

,然后在相应的.h文件中你需要做这样的事情:

@interface MasterViewController : UIViewController<UINavigationControllerDelegate> 
+0

唉,似乎LuisCien打败了我.. – pnizzle

我不认为你需要这些导航委托方法在所有。相反,在包含该表的视图控制器中,重新加载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]; 
    } 
}