我正在使用以下代码在用户点击按钮时显示上一个视图
[self.navigationController popViewControllerAnimated:YES];
在上一个视图中,我覆盖了viewWillAppear来初始化一些东西。但是,似乎没有调用viewWillAppear。我把NSLog放在viewDidload,viewWillAppear,viewDidAppear中,只调用viewDidAppear。这是正常的行为吗?如果是,我应该覆盖什么事件,以便我可以进行初始化?谢谢。
按要求-viewWillAppear查看上一个视图
- (void)viewWillAppear:(BOOL)animated{
NSLog(@"ViewWillAppear");
//[[GameStore defaultStore] resetGame];
[self setHangmanImage];
NSLog([[[GameStore defaultStore] selectedList] label]);
[labelListName setText:[NSString stringWithFormat:@"List Name: %@", [[[GameStore defaultStore] selectedList] label]]];
[labelCurrentIndex setHidden:YES];
[labelCurrentWord setHidden:YES];
[[self navigationController] setNavigationBarHidden:NO];
[FlurryAnalytics logEvent:@"GameViewController - viewWillAppear"];
[self getNewQuestion];
NSLog(@"ViewWillAppear finish");
[super viewWillAppear:YES];
}
我使用以下代码
在app委托中设置UINavigationalController- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
HomeViewController *hv = [[HomeViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:hv];
// You can now release the itemsViewController here,
// UINavigationController will retain it
[hv release];
// Place navigation controller's view in the window hierarchy
[[self window] setRootViewController:navController];
[navController release];
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
return YES;
}
更新
我不知道发生了什么,但昨晚试图再次在模拟器中运行应用程序并仍然遇到此问题后,我决定保存所有内容并关闭计算机,因为它已经迟到了。
今天早上我打开电脑打开xcode,清理项目并构建并运行它,问题解决了,并调用了-viewWillAppear。我没有改变任何东西和它的工作。我在-willShowView中添加了NSLog并且没有被调用。我不知道为什么突然间会看到威尔·阿帕尔被召唤。
答案 0 :(得分:9)
确保设置了导航控制器的委托,然后使用此功能在要调用viewWillAppear的类中调用viewWillAppear:
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[self viewWillAppear:animated];
}
答案 1 :(得分:4)
我刚刚遇到的问题非常相似,经过一些测试后发现调用popViewControllerAnimated:在一个块(来自AFNetworking中的网络响应)中,在父视图中没有调用viewDidAppear。 这里对我有用的解决方案是在主线程中调用它。
dispatch_async(dispatch_get_main_queue(), ^{
// If not called on the main thread then the UI doesn't invoke the parent view's viewDidAppear
[self.navigationController popViewControllerAnimated:YES];
});
答案 2 :(得分:0)
我也遇到了这个问题,根本原因是因为我将self.navigationController.delegate = self放在viewDidLoad上。我的解决方案是将委托置于viewWillAppear上:
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.navigationController.delegate = self;
}
在那之后,popViewController将打到viewWillAppear。