2013-12-09 2 views
1

Привет У меня есть некоторый код, я обновляю для прошивки 7, так что у меня есть проблемы, описанные здесь: iOS 7 Status Bar Collides With NavigationBarКак добавить Навигационный контроллер запрограммированной панели вкладок

Так что я пытаюсь это исправить , В моем представлении «Просмотр магазина» я добавил контроллер навигации. Проблема в том, что мой код падает с этой ошибкой:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "RestaurantSearch" nib but the view outlet was not set.' 

Я не уверен, что установить розетку. Раньше, когда это было просто представление, оно было настроено на владельца файла. Это больше не вариант.

Вот мой код для панели вкладок

void SetTabbar(UIViewController *selfView) 
{ 
UITabBarController *tab = [[[UITabBarController alloc] init] autorelease]; 

nibName = NIB_NAME(@"RestaurantSearch"); 
RestaurantSearch *vc1 = [[RestaurantSearch alloc] initWithNibName:nibName bundle:nil]; 
UINavigationController *nav1 = [[[UINavigationController alloc] initWithRootViewController:vc1] autorelease]; 
nav1.tabBarItem.title = @"Search"; 
nav1.tabBarItem.image = [UIImage imageNamed:@"search_on.png"]; 
[nav1.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"green_search_on.png"] withFinishedUnselectedImage:nil]; 
nav1.navigationBarHidden = YES; 

nibName = NIB_NAME(@"Friends"); 
Friends *vc2 = [[Friends alloc] initWithNibName:nibName bundle:nil]; 
UINavigationController *nav2 = [[[UINavigationController alloc] initWithRootViewController:vc2] autorelease]; 
nav2.tabBarItem.title = @"Friends"; 
nav2.tabBarItem.image = [UIImage imageNamed:@"contact_on.png"]; 
[nav2.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"green_contact_on.png"] withFinishedUnselectedImage:nil]; 
nav2.navigationBarHidden = YES; 

nibName = NIB_NAME(@"RewardList"); 
RewardList *vc3 = [[RewardList alloc] initWithNibName:nibName bundle:nil]; 
UINavigationController *nav3 = [[[UINavigationController alloc] initWithRootViewController:vc3] autorelease]; 
nav3.tabBarItem.title = @"Reward"; 
nav3.tabBarItem.image = [UIImage imageNamed:@"reward_on.png"]; 
[nav3.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"green_reward_on.png"] withFinishedUnselectedImage:nil]; 
nav3.navigationBarHidden = YES; 

nibName = NIB_NAME(@"MoreViewController"); 
MoreViewController *vc4 = [[MoreViewController alloc] initWithNibName:nibName bundle:nil]; 
UINavigationController *nav4 = [[[UINavigationController alloc] initWithRootViewController:vc4] autorelease]; 
nav4.tabBarItem.title = @"More"; 
nav4.tabBarItem.image = [UIImage imageNamed:@"more_on.png"]; 
[nav4.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"green_more_on.png"] withFinishedUnselectedImage:nil]; 
nav4.navigationBarHidden = YES; 

// Change the tabbar's background and selection image through the appearance proxy 
[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"tabbar_bg_flat.png"]]; 
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar_selection_flat.png"]]; 

NSArray *array = [NSArray arrayWithObjects:nav1, nav2, nav3, nav4, nil]; 
[tab setViewControllers:array]; 


// Text appearance values for the tab in normal state 
NSDictionary *normalState = @{ 
           UITextAttributeTextColor : [UIColor colorWithWhite:0.213 alpha:1.000], 
           UITextAttributeTextShadowColor: [UIColor whiteColor], 
           UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0.0, 1.0)] 
           }; 

// Text appearance values for the tab in highlighted state 
NSDictionary *selectedState = @{ 
           UITextAttributeTextColor : [UIColor blackColor], 
           UITextAttributeTextShadowColor: [UIColor whiteColor], 
           UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0.0, 1.0)] 
           }; 

[[UITabBarItem appearance] setTitleTextAttributes:normalState forState:UIControlStateNormal]; 
[[UITabBarItem appearance] setTitleTextAttributes:selectedState forState:UIControlStateHighlighted]; 

[selfView.navigationController pushViewController:tab animated:YES]; 
g_tabbar = tab; 
} 

Катастрофа происходит на этой линии [selfView.navigationController pushViewController:tab animated:YES];

Вот снимок экрана моего просмотра Навигатора установки. Screen Shot

Я думал, что это может быть возможным дубликатом этого вопроса Loaded nib but the view outlet was not set - new to InterfaceBuilder

Однако, когда я следовать инструкциям, я получаю новую ошибку:

'A view can only be associated with at most one view controller at a time! View <UIView: 0x1dd45ae0; frame = (0 0; 320 460); autoresize = W+H; autoresizesSubviews = NO; layer = <CALayer: 0x1dd45b40>> is associated with <RestaurantSearch: 0x1dd28e20>. Clear this association before associating this view with <RestaurantSearch: 0x1f03df70>.' 

Моя догадка я зацепив что-то неправильно, но я не уверен, что. I ctr + перетащил с контроллера навигации на мой вид на изображении выше. Может ли это иметь к этому какое-то отношение?

+0

Вы можете посмотреть на http://stackoverflow.com/questions/13835724/programming-tabbarcontroller-with-navigation-in -appdelegate/13839852 # 13839852 –

+0

Я не использую StoryBoard, можно ли использовать контроллер навигации без использования StoryBoard? – tomjung

+0

Решение этой ссылки не использует раскадровку, в ней объясняется, как программно добавить контроллер навигации в контроллер табуляции (и я смутно помню, чтобы противоположность не была возможна?) Однако решение «[self.window setRootViewController: tab]; " может быть все, что вам нужно, так как ваша ошибка очень описательная и говорит точно, что не так: у вас есть два контроллера вида, которые используются этим представлением! –

ответ

1

Вы должны добавить панель вкладок корневого навигационного контроллера в свое приложение. Панель вкладок должна быть контроллером корневого представления. Вы не можете подталкивать его к подзону диспетчера представлений. Вы должны добавить его в окно в applicationDidFinishLaunching: метод, как:

[self.window setRootViewController:tab]; 
Смежные вопросы