代码之家  ›  专栏  ›  技术社区  ›  gabaum10

UINavigationController和viewwill消失

  •  3
  • gabaum10  · 技术社区  · 15 年前

    因此,我的应用程序中有一个UINavController,当用户按下后退按钮时,我正在尝试执行一个方法。我到处都找遍了,只能找到一些没有意义的零碎东西。

    5 回复  |  直到 15 年前
        1
  •  2
  •   Rengers    15 年前

    另外,如果通过代码将UINavigationController添加到UIView,那么默认情况下它不会将这些消息发送到其子视图。只有当UINavigationController自己接收到这些调用时,它才会这样做。也许这是你的问题(我不知道你的视图设置)。

    因此,在添加UINavigationController的视图时,请确保手动向其发送这些消息。

    UINavigationController *navigationController = [UINavigationController alloc] initWithRootViewController:rootViewController];
    
    [navigationController viewWillAppear:NO];
    [aView addSubview:navigationController.view];
    [navigationController viewDidAppear:NO];
    

    至少,这是我在开发过程中发现的。我已经找了很长一段时间,但我还是不明白背后的道理。

        2
  •  6
  •   TPoschel    14 年前

    UINavigationControllerDelegate . 只有两个方法在将UIViewController推送到导航控制器堆栈时被调用。类似地,如果一个人被推了,那么很可能有东西被弹出了。这就是我所说的viewdiddiscover和viewwilldiscover。

    # pragma mark - UINavigationControllerDelegate Methods
    
    - (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
    {
        static UIViewController *vcPointer = nil;
    
        // If the previous view controller is still around then let's send a viewWillDisappear message
        if (vcPointer != nil) {
            if ([vcPointer respondsToSelector:@selector(viewWillDisappear:)]) {
                [vcPointer viewWillDisappear:animated];
            }
        }
    
        // Keep track of a pointer to the current viewController
        vcPointer = viewController;
    
        [viewController viewWillAppear:animated];   
    }
    

    该代码保留指向最后一个视图控制器的指针引用,这样,一旦我们推另一个视图控制器,我们就可以弹出最后一个(如果它仍然存在)。

        3
  •  0
  •   Rod    15 年前

    您始终可以隐藏默认的后退导航按钮,并使用按下时要调用的方法创建自己的后退导航按钮。

    执行你想要的代码,然后弹出视图。

        4
  •  0
  •   Christian Loncle    15 年前

    我用了这个方法:

    • 在导航栏的左侧添加自定义按钮

    这种解决方法的缺点是:你会失去那个漂亮的箭头形状的“后退”按钮。这也可以通过自定义图像来解决。

    把这个放到你的视图中加载:

    // LeftButton in Navigation Bar
    UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPushed:)];
    self.navigationItem.leftBarButtonItem = leftBarButton;
    [leftBarButton release]; 
    

    然后将此方法添加到同一.m文件中:

    - (void) backButtonPushed: (id)sender  {
    // do what you want to do       
    }
    

    - (void) backButtonPushed: (id)sender;
    
        5
  •  -1
  •   devinross    15 年前

    当控制器被弹出或解除时,将调用viewwilldisplase&viewdiddisplase。该函数在前视图控制器上调用,而不是在UINavigationController本身上调用。你有没有可能因为某件事而忘记给上级打电话?