我在导航界面添加了导航控制器。用户登录后,视图将被重定向到另一个名为DetailVC
的视图控制器。
如果用户之前已登录,则用户将自动导航至DetailVC
。这部分很完美。但是,导航控制器中的默认后退按钮显示在DetailVC
上。我该如何删除它?
在DetailVC
我将导航到其他视图,并且应该从该点开始显示导航后退按钮。我只希望它在DetailVC
上消失。我怎么能这样做?
答案 0 :(得分:3)
这应该可以解决问题:
[self.navigationItem setHidesBackButton:YES];
否则:
self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
答案 1 :(得分:1)
您可以调整导航栏,但这似乎可以解决创建的问题而不是避免问题。
将应用程序分为两部分可能更为正确:登录和登录。
在你的应用程序代表加载时,我会将登录控制器创建为单独的项目,并将DetailVC创建为单独的项目。将DetailVC作为UINavigationController的根控制器。
类似的东西:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
// Create login and logged in controllers as properties.
self.loginController = ... // Use storyboard or however you init this
self.detailVC = ... // Use storyboard or however you init this
self.loggedInController = ... //UINavigationController with root as self.detailVC
// Check for logged in
if (self.loggedIn){
[self switchToLoggedIn];
}
else{
[self switchToLogin];
}
}
- (void) switchToLogin{
self.window.rootViewController = self.loginController;
[self.window makeKeyAndVisible];
}
- (void) switchToLoggedIn{
self.window.rootViewController = self.loggedInController;
[self.window makeKeyAndVisible];
}
在您的登录代码中,您可以要求应用程序委托实例在经过身份验证后切换到已登录的控制器,并在注销时切换到登录控制器。
由于登录控制器是一个UINavigationController,它将以正确的方式启动,没有后退按钮。
另一个更简单但类似的选项是从登录模式在UINavigationController中呈现您的DetailVC。因为它是新堆栈的开始,所以它没有后退按钮。要注销,只需关闭控制器导航控制器。
答案 2 :(得分:1)
Rory的答案的另一种选择,但是以类似的方式,而不是在登录完成时推送新的视图控制器,而是考虑:
[self.navigationController setViewControllers:@[ myDetailVC ] animated:YES];
这将用新的根视图控制器(登录)替换,因此没有后退按钮。