当用户点击已选择的同一标签栏项目时,我想覆盖 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 只是再次推送登录控制器. 在这种情况下,我希望动画为“否”。
为了增加我的问题,还有其他导航堆栈可以推送登录控制器,并且适合点击其标签栏项目以弹出到根控制器。我已经在登录控制器中实现了 UITabBarControllerDelegate 协议和 tabBarController:shouldSelectViewController: 以检查点击的栏项目根控制器是否相同,以及该控制器是否是我想要特殊情况的控制器的类,但它似乎不优雅。不仅如此,现在登录控制器还必须知道可以将其推送到导航堆栈的控制器的类。虽然我可以继续使用协议方法,但必须有更好的方法来做到这一点。
感谢您的意见和想法!