【问题标题】:popToRootViewControllerAnimated not performing correctly in context of shouldSelectViewController UITabBarControllerDelegate methodpopToRootViewControllerAnimated 在 shouldSelectViewController UITabBarControllerDelegate 方法的上下文中未正确执行
【发布时间】:2012-11-01 22:30:33
【问题描述】:

我已经为我的 UITabBarController 设置了一个委托,并有以下委托方法:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {    
        [self.navigationController popToRootViewControllerAnimated: YES];
        return NO;
}

该方法触发,在上下文中,我进入表视图的一两个级别。根视图控制器正确显示,但导航栏没有重置,并且仍然有一个从一到两级进入表视图的“后退”按钮。

(上面的委托方法是我在我的应用程序中尝试做的简化形式,但仍然存在问题。在我的应用程序中,我需要在返回原始选项卡时显示根视图,所以我在我离开之前尝试弹出到根视图)。

popToRootViewControllerAnimated not working correctly 提出了一个时间滞后问题,但这似乎不是我的情况。在执行 shouldSelectViewController 之前,我可以等待多久,但导航栏的“后退”按钮仍然混乱。

代表是:

@interface BasicPlaceItemComment : UIViewController<UIAlertViewDelegate, UITabBarControllerDelegate> {
    // data members ommitted
} 

这是我派生所有表格视图的类。

【问题讨论】:

    标签: objective-c uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    您确定该方法在正确的上下文中吗? 谁符合 TabBarDelegate?如果是您的 AppDelegate,那么 self.navigationController 可能为零。 如果您使用的是 TabBar 并且您有多个导航控制器,那么您可能在错误的控制器上调用 popToRootViewController。 尝试插入:

    NSLog(@"%@", self.navigationController);
    

    在您的方法的开头,并确保您获得正确导航控制器的地址。

    发布更多代码可能会有所帮助。

    【讨论】:

    • 代表的类是:
    • 谢谢!我现在想通了。回答关注!
    【解决方案2】:

    问题似乎是我将 UINavigationController 子类化以解决不同的问题。当我删除这个子类时,问题就消失了。也就是说,当我在没有继承 UINavigationController 的情况下执行 popToRootViewController 时,“后退”按钮不再混乱。然而,这引发了另一个问题。我正在继承 UINavigationController 以解决UINavigationController and UINavigationBarDelegate.ShouldPopItem() with MonoTouch 中所述的问题

    通过我的导航栏和标签栏,我希望能够显示一条消息“你确定要退出吗?”在显示视图中的某些数据发生更改的情况下(在导航离开该视图之前,并可能取消导航离开该视图),按下后退按钮(或另一个选项卡)时发出警报。

    所以,虽然这是部分答案,但我的问题仍然存在。当用户键入后退按钮或另一个选项卡时,我仍然需要一种方法来获得控制权。所以,看来我需要: 1) 对于 UINavigationBarDelegate 方法 shouldPopItem 具有与 UINavigationController 不同的委托的方法,或者 2) 有一些方法可以继承 UINavigationController 但不会像我单击选项卡并调用 popToRootViewController 时那样弄乱后退按钮。

    还有什么想法?

    更多关于 11/3/12

    导致问题的不是 UINavigationController 子类本身。我无意中从我的委托方法中返回 NO

    // This method returns true when the navigation bar should pop an item
    - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
    

    当我做了一个 popToRootViewController。现在我的 UINavigationController 子类中有一个方法:

    - (void) popToRoot {
        regularPop = YES;
        [self popToRootViewControllerAnimated: YES];
    }
    

    这会导致 shouldPopItem 返回 YES,我使用它来代替 popToRootViewController。我的大部分问题都解决了!

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 2018-06-28
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      相关资源
      最近更新 更多