我尝试将UIViewController推送到UINavigationController上。 NavigationBar更改(即出现后退按钮),但未按下视图(*)。
我有一个UITabBarController作为我的应用程序RootViewController。
当我切换到另一个选项卡然后切换回来时,视图(*)被推送。
我以前从未见过这种行为。我的问题与this完全相同,但是解决这个问题的方法并没有解决我的问题。
首先
按下行
我知道这个问题可能与AppDelegate中的问题有关,因此我发布了我使用的代码。
代码:
AppDelegate中的:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[MagicalRecord setupCoreDataStackWithStoreNamed:@"DBModel"];
/* CONTACTS LIST CONTROLLER */
BoonContactListViewController *contactListViewController = [[BoonContactListViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *contactListNavigationController = [[UINavigationController alloc] initWithRootViewController:contactListViewController];
[contactListNavigationController setValue:[[BoonNavigationBar alloc]init] forKeyPath:@"navigationBar"];
contactListNavigationController.tabBarItem.title = [NSLocalizedString(@"CONTACTS", nil) capitalizedString];
contactListNavigationController.tabBarItem.image = [UIImage imageNamed:@"menu_contacts.png"];
/* INVITATIONS */
BoonInvitationListViewController *invitationListController = [[BoonInvitationListViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *invitationNavigationController = [[UINavigationController alloc] initWithRootViewController:invitationListController];
[invitationNavigationController setValue:[[BoonNavigationBar alloc]init] forKeyPath:@"navigationBar"];
invitationNavigationController.tabBarItem.title = [NSLocalizedString(@"SETTINGS", nil) capitalizedString];
invitationNavigationController.tabBarItem.image = [UIImage imageNamed:@"menu_invitations.png"];
/* SETTINGS */
BoonSettingsViewController *settingsViewController = [[BoonSettingsViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *settingsNavigationController = [[UINavigationController alloc] initWithRootViewController:settingsViewController];
[settingsNavigationController setValue:[[BoonNavigationBar alloc]init] forKeyPath:@"navigationBar"];
settingsNavigationController.tabBarItem.title = [NSLocalizedString(@"SETTINGS", nil) capitalizedString];
settingsNavigationController.tabBarItem.image = [UIImage imageNamed:@"menu_settings.png"];
/* TAB BAR */
BoonTabBarViewController *tabBarController = [[BoonTabBarViewController alloc] init];
tabBarController.viewControllers = @[contactListNavigationController, invitationNavigationController, settingsNavigationController];
[self.window setRootViewController:tabBarController];
[self.window makeKeyAndVisible];
[tabBarController showLogin];
return YES;
}
修改
在我试图推送的viewController中,viewWillAppear
,viewDidLoad
和viewDidAppear
都没有被调用。
如果我使用presentViewController: animated: completion:
,我会得到首选行为,而不是
编辑2
我如何推送新的VC
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
BoonContactInfoViewController *contactInfoViewController = [[BoonContactInfoViewController alloc] initWithNibName:nil bundle:nil];
NSLog(@"NAV %@", self.navigationController);
[self.navigationController pushViewController:contactInfoViewController animated:YES];
}
编辑3 它只是初始选项卡无法推送...如果我交换第一个和第二个选项卡的位置,我可以按照我上面的方式使用视图控制器。
编辑4 如果我(在我的tabBarController中)调用
,它可以工作self.selectedIndex = 1;
self.selectedIndex = 0;
编辑5
- (void)showLogin
{
if([BoonUserHandler getLogin].length > 0 && [BoonUserHandler getPassword].length > 0){
return;
}
BoonWelcomeViewController *welcomeWC = [[BoonWelcomeViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *welcomeNavigationController = [[UINavigationController alloc] initWithRootViewController:welcomeWC];
[welcomeNavigationController setNavigationBarHidden:YES];
[self presentViewController:welcomeNavigationController animated:NO completion:nil];
}
答案 0 :(得分:1)
您正在为什么版本的iOS开发?
我首先要问你为什么要在导航栏中黑客攻击:
[settingsNavigationController setValue:[[BoonNavigationBar alloc]init] forKeyPath:@"navigationBar"];
而不是iOS5 + UINavigationController
方法:
- (instancetype)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass
但我的总体建议是删除所有这些代码并使用故事板。这看起来是一个绝佳的机会。
答案 1 :(得分:0)
我认为你的导航控制器出错了,这就是为什么它会出现这个问题..
您必须从标签控制器
获取正确的导航控制器
self.tabBarController.selectedIndex = 0;
只需更改标签控制器选择的索引