0

在不给你我所有的代码示例的情况下,我会快速完成。

你们中的一个人有没有发生过这种情况,只在第一次出现时才调用 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];

多谢。

4

2 回答 2

1

您可以在导航控制器中实现 UINavigationControllerDelegate 以向下传播 viewWillAppear: 消息。您可以像这样实现消息:

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

请注意,这是 viewDidAppear 而不是 ViewWillAppear 版本,但它们基本相同。

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

于 2010-03-30T17:34:57.967 回答
1

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

于 2010-03-30T17:22:47.177 回答