【问题标题】:Is there a way to override popToRootViewControllerAnimated: invoked by a tap on a Tab Bar Item?有没有办法覆盖 popToRootViewControllerAnimated: 通过点击选项卡栏项调用?
【发布时间】:2012-07-23 23:08:17
【问题描述】:

当用户点击已选择的同一个标签栏项目时,我想覆盖 popToRootViewControllerAnimated:(当前:YES)的动画。

当第一次点击标签栏项目时,我在标签栏项目根视图控制器的 viewWillAppear: 方法中检查用户是否已登录,如果没有,立即推送禁用动画的登录控制器。

controller.navigationItem.hidesBackButton = YES;
[self.navigationController pushViewController:controller animated:NO];
[controller release];

当用户登录成功后,我弹回根控制器,【动画是】没问题:

[self.navigationController popViewControllerAnimated:YES];

但是,再次点击当前标签栏项目时的默认行为似乎会进行以下调用:

-[UITabBarController _tabBarItemClicked:]

哪个调用

-[UINavigationController popToRootViewControllerAnimated:]

我无法判断 YES 是否传递到最后一个,但根据观察假设是这样。 如果用户没有登录但再次点击标签栏项目,看起来相同的 [登录] 控制器正在被推送/弹出动画,因为根控制器的 viewDidLoad 只是再次推送登录控制器.在这种情况下,我希望动画为 NO。

为了增加我的问题,还有其他导航堆栈可以推送登录控制器,并且适合点击其标签栏项目以弹出到根控制器。 我已经在登录控制器中实现了 UITabBarControllerDelegate 协议和 tabBarController:shouldSelectViewController: 以检查点击的栏项目根控制器是否相同,以及该控制器是否是我想要特殊情况的控制器的类,但它似乎不优雅。不仅如此,现在登录控制器必须知道可以将其推送到导航堆栈的控制器的类。虽然我可以继续使用协议方法,但必须有更好的方法来做到这一点。

感谢您的意见和想法!

【问题讨论】:

    标签: uiviewcontroller uinavigationcontroller uitabbarcontroller uitabbaritem


    【解决方案1】:

    我认为这个问题的最佳解决方案是在选择标签栏按钮时呈现一个模态视图控制器,然后返回 NO。从委托方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2022-06-15
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多