在没有给您所有代码示例的情况下,我会很快。

你们中的一个人是否曾经发生过这件事,只有第一次出现的viewwillappear就被称为?

我所有的观点都有这个问题。

例如:当我的应用程序启动时,我到达StartView是一个主菜单。 (调用ViewWillAppear)然后,我按一个将显示导航控制器的按钮(viewWillAppear被调用)。然后,我返回主菜单(没有被调用),然后再次按同一导航控制器,并且不会被调用。

如果有人可以将我指向某个地方,那将是很棒的,我从两天起就一直在寻找这个...

另外,如果您需要更多的代码示例,我可以给您一些。

用于进一步阅读:

这就是我称之为导航控制器的方式:

PremierSoinsAppDelegate *AppDelegate = (PremierSoinsAppDelegate *)[[UIApplication sharedApplication] delegate];

UIView *newView = [AppDelegate.navigationController view];

[newView setFrame:CGRectMake(320.0f, 0.0f, 320.0f, 480.0f)];
[UIView beginAnimations:@"RootViewController" context:nil];
[UIView setAnimationDuration:0.3];
newView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
UIView commitAnimations];

[AppDelegate.window addSubview:newView];
[AppDelegate.window makeKeyAndVisible];

这就是我向我的菜单显示的方式:

PremierSoinsAppDelegate *AppDelegate = (PremierSoinsAppDelegate *)[[UIApplication sharedApplication] delegate];

UIView *newView = [AppDelegate.startViewController view];

newView setFrame:CGRectMake(-320.0f, 0.0f, 320.0f, 480.0f)];
UIView beginAnimations:@"StartViewController" context:nil];
UIView setAnimationDuration:0.3];
newView setFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
[UIView commitAnimations];

[AppDelegate.window addSubview:newView];
[AppDelegate.window makeKeyAndVisible];

多谢。

有帮助吗?

解决方案

您可以在导航控制器中实现uinavigationControllerDelegate,以传播ViewWillAppear:消息。您可以这样实现这样的消息:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
        [viewController viewDidAppear:animated];
    }
}

请注意,这是ViewDidappear,而不是ViewWillAppear版本,但基本上是相同的。

但是,您应该注意到,您需要这样做的事实可能表明您的控制器/视图代码中还有其他问题,您可能想重新讨论一个问题,使我们有更多的上下文来回答它。特别是,我假设在您给我们的代码之外的某个地方,您正在按照NAV控制器的往常来推动和弹出视图控制器。

其他提示

viewwill/didappear:只有在使用UinavigationController或UitabBarController(或实际上任何系统提供的ViewControlller管理类)来操纵视图时,才会被调用。如果您正在手动执行此操作(就像您在第二个代码段中所做的那样,这些消息不会发送。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top