尝试模仿/复制内置地址簿,特别是从“电话”应用程序内部编辑联系人或查看现有联系人信息时的行为。当您导航到另一个选项卡时,编辑状态将重置,并弹出“新联系人”或“信息”视图,以便当您返回“联系人”选项卡时,您将返回到根表视图。
我使用 setEditing: 和 popToViewController: 在 viewWillDisappear 中完成了大部分工作,但是当用户使用后退按钮从 Info 视图导航到表视图时,我会得到奇怪的行为。即使我弹出到根表视图控制器,它似乎正在使用默认的 UITableViewController 类而不是我的子类(例如,标准选择行为而不是我的覆盖来推送详细信息视图。)
有什么提示吗?内窥镜检查
下面是一些代码来说明:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// This is to clean up from the colored bar in detail view
self.navigationController.navigationBar.tintColor = nil;
// These are to match the behaviour of Contacts app
[self setEditing:NO animated:NO];
// This is the tricky part: works when switching tabs, but not when back button was going to pop anyway!!
[self.navigationController popToViewController:rootViewControllerForTab animated:NO];
}
-viewWillDisappear: 方法不是修改 navigationController 的视图控制器堆栈的最佳位置,因为当您切换选项卡和将视图推到其顶部时都会触发该方法。
我对此进行了一些尝试,发现最好的位置是在 -[UITabBarControllerDelegate tabBarController:didSelectViewController:] 方法中。因此,首先您需要指定一个对象作为选项卡栏的委托(我使用了应用程序委托)。将 UITabBarController 的 delegate 属性绑定到在代码或 Interface Builder 中实现 UITabBarControllerDelegate 协议的对象。
然后,实现 -tabBarController:didSelectViewController: 方法。现在的技巧是如何判断您的“地址簿”选项卡何时被切换。我使用 UINavigationController 类型的属性(选项卡的根视图控制器)跟踪相关选项卡的视图控制器。使用 Interface Builder 将 tab1NavController 属性绑定到实际实例后,可以使用它与 viewController 参数进行比较,以查看刚刚选择了哪个选项卡。
@interface Pop2RootTabSwitchAppDelegate : NSObject
<UIApplicationDelegate, UITabBarControllerDelegate> {
UINavigationController *tab1NavController;
}
@property (nonatomic, retain) IBOutlet UINavigationController *tab1NavController;
@end
@implementation Pop2RootTabSwitchAppDelegate
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController {
NSLog(@"[%@ tabBarController:%@ didSelectViewController:%@]", [self class],
tabBarController, viewController);
if (viewController == tab1NavController) {
NSLog(@"viewController == tab1NavController");
[tab1NavController popToRootViewControllerAnimated:NO];
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)