代码之家  ›  专栏  ›  技术社区  ›  Tommy B.

视图将出现相关问题

  •  0
  • Tommy B.  · 技术社区  · 14 年前

    如果不给你我所有的代码示例,我会很快做到这一点。

    你们中有人有过这样的经历吗?只有当视图第一次出现时,它才会被调用?

    我对自己的观点都有这个问题。

    例如:当我的应用程序启动时,我会进入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];
    

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   corprew    14 年前

    您可以在导航控制器中实现uinavigationcontrollerdelegate来传播视图将显示:messages down。您可以这样实现消息:

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

    请注意,这是viewdid显示,而不是viewwillappear版本,但它们基本上是相同的。

    但是,您应该注意,您需要这样做的事实可能是控制器/视图代码中存在其他错误的迹象,您可能希望重新考虑这个问题,给我们更多的上下文来回答它。特别是,我假设在你给我们的代码之外的某个地方,你像往常一样推和弹出一个导航控制器的视图控制器。

        2
  •  1
  •   Ben Gottlieb    14 年前

    仅当使用uinavigationController或uitabbarController(或任何系统提供的ViewController管理类)来操作视图时,才会调用viewwill/did。如果您手动执行此操作(就像在第二个代码片段中所做的那样),则不会发送这些消息。