root view контролери и push

Добър ден! Имам 5 контролера за преглед. Един от тях искам да изтласкам от UITableView клетка така:

Contacts *detailViewController = [[Contacts alloc] initWithNibName:@"Contacts" bundle:nil];

NSLog(@"%@",self.navigationController);

[self.navigationController pushViewController:detailViewController animated:NO];

в appDelegate успях да добавя контролери за root изглед като този:

mainView = [[UINavigationController alloc] initWithRootViewController:[[MainViewController alloc] initWithNibName: @"MainViewController" bundle: nil]];

secondView = [[UINavigationController alloc] initWithRootViewController:[[SearchController alloc] initWithNibName: @"SearchController" bundle: nil]];

thirdView  = [[UINavigationController alloc] initWithRootViewController:[[CitySearch alloc] initWithNibName: @"CitySearch" bundle: nil]];

forthView = [[UINavigationController alloc] initWithRootViewController:[[MessengerMenu alloc] initWithNibName:@"MessengerMenu" bundle:nil]];

fifthView = [[UINavigationController alloc] initWithRootViewController:[[Contacts alloc] initWithNibName:@"Contacts" bundle:nil]];

tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects: mainView ,secondView, thirdView, forthView, fifthView, nil];

[self.window setRootViewController:tabBarController];

но self.navigationController в Messenger viewController все още е нулев и натискането не се случва.

какво правя грешно


person Pavel    schedule 14.02.2014    source източник
comment
Има ли Messenger и MessengerMenu един и същ контролер?   -  person sage444    schedule 14.02.2014
comment
е странно, вижте self.rootViewController това може да изясни ситуацията   -  person sage444    schedule 14.02.2014
comment
не изглежда грешно във вашия код :(   -  person larva    schedule 14.02.2014
comment
@Pavel о, искам да кажа, проверете self.parentViewController, за да видите откъде навигирате и какво да правите, и ако родителят има navigationController, можете да го използвате за натискане   -  person sage444    schedule 14.02.2014
comment
Покажете вашия още код...на .h файл...   -  person Samkit Jain    schedule 14.02.2014
comment
self.window.rootViewController е ‹UITabBarController: 0x16daa150›   -  person Pavel    schedule 14.02.2014
comment
Къде добавихте своя push контролер за преглед? Горното, което се поставя в контролера на MessengerMenu или друго?   -  person Mani    schedule 14.02.2014
comment
Покажете .h файла на вашия контролер, където добавяте насочен код   -  person Samkit Jain    schedule 14.02.2014
comment
интерфейс AppDelegate : UIResponder ‹UIApplicationDelegate›{ } свойство (силно, неатомично) UINavigationController *navigationController; свойство (силно, неатомично) UIWindow *прозорец; свойство (силно, неатомично) UITabBarController *tabBarController;   -  person Pavel    schedule 14.02.2014
comment
Как декларирате mainView   -  person Samkit Jain    schedule 14.02.2014
comment
UINavigationController *mainView, *secondView, *thirdView;   -  person Pavel    schedule 14.02.2014
comment
Покажете грешката, ако има такава   -  person Samkit Jain    schedule 14.02.2014
comment
какво направихте със свойството (силно, неатомно) UINavigationController *navigationController;   -  person larva    schedule 14.02.2014
comment
не правя нищо с UINavigationController *navigationController; просто декларирайте и синтезирайте   -  person Pavel    schedule 14.02.2014
comment
задайте избрано [tabBarController setSelectedIndex:3]; в контролера на лентата с раздели...   -  person jailani    schedule 14.02.2014
comment
да, работи. но други изгледи не :(   -  person Pavel    schedule 14.02.2014
comment
[tabbarController setViewController:масив]; вместо tabBarController.viewController.   -  person jailani    schedule 14.02.2014


Отговори (4)


Трябва да направите alloc всички viewController с помощта на UIViewController и да ги добавите към tabbarController.

ако искате един от тях като navigationController, просто го поставете a

Сега основният контролер на NavigationController може да бъде направен на tabBarController.

mainView = [[MainViewController alloc] initWithNibName: @"MainViewController" bundle: nil];

secondView = [[SearchController alloc] initWithNibName: @"SearchController" bundle: nil];

thirdView  = [CitySearch alloc] initWithNibName: @"CitySearch" bundle: nil];

forthView = [[MessengerMenu alloc] initWithNibName:@"MessengerMenu" bundle:nil];

self.navigationController =[[UINavigationController alloc] initWithRootViewController:forthView];
fifthView = [[Contacts alloc] initWithNibName:@"Contacts" bundle:nil]];

tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects: mainView ,secondView, thirdView, forthView, fifthView, nil];



[self.window setRootViewController:tabBarController];
person Samkit Jain    schedule 14.02.2014
comment
той иска да добави всеки раздел е един контролер за навигация - person larva; 14.02.2014
comment
не помогна. има нещо друго. опитах се да направя само един контролер [self.window setRootViewController:fourthView]; работи. но когато има много контролери в tabBar, това не е така - person Pavel; 14.02.2014

Опитайте се да използвате този метод на alloc init за създаване на NSArray от контролери за изглед,

tabBarController.viewControllers = [NSArray alloc] initWithObjects: mainView ,secondView, thirdView, forthView, fifthView, nil];

Или първо създавате UITabbarViewController, задавате го на rootVC:

tabBarController = [[UITabBarController alloc] init];
[self.window setRootViewController:tabBarController];

тогава:

mainView = [[UINavigationController alloc] initWithRootViewController: 
[[MainViewController alloc] initWithNibName: @"MainViewController" bundle: nil]];
 secondView =[[SearchController alloc] initWithNibName: @"SearchController" bundle: nil];
 thirdView  = [[CitySearch  alloc] initWithNibName: @"CitySearch" bundle: nil];
 forthView = [[MessengerMenu alloc] initWithNibName:@"MessengerMenu" bundle:nil];
fifthView = [[Contacts alloc] initWithNibName:@"Contacts" bundle:nil];

tabBarController.viewControllers = [NSArray arrayWithObjects: mainView ,secondView, thirdView, forthView, fifthView, nil];
person Ezimet    schedule 14.02.2014
comment
все още null в '- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Навигационната логика може да отиде тук, например: // Създайте следващия контролер за изглед. Контакти *detailViewController = [[Contacts alloc] initWithNibName:@Contacts bundle:nil]; NSLog(@%@,self.navigationController); [self.navigationController pushViewController:detailViewController animated:NO]; } ' - person Pavel; 14.02.2014

Надявам се да работи....

mainView = [[MainViewController alloc] initWithNibName: @"MainViewController" bundle: nil];

secondView = [[SearchController alloc] initWithNibName: @"SearchController" bundle: nil];

thirdView  = [CitySearch alloc] initWithNibName: @"CitySearch" bundle: nil];

forthView = [[MessengerMenu alloc] initWithNibName:@"MessengerMenu" bundle:nil];


UINavigationController *navmain = [[UINavigationController alloc]initWithRootViewController:mainView];

UINavigationController *navSecond = [[UINavigationController alloc]initWithRootViewController:secondView];

UINavigationController *navThird = [[UINavigationController alloc]initWithRootViewController:thirdView];

UINavigationController *navFourth = [[UINavigationController alloc]initWithRootViewController:forthView];
    //Second, third, fourth...

    NSArray *array = [[NSArray alloc]initWithObjects:navmain, navSecond, navThird, navFourth, nil];
        [tabBarController setViewControllers:array];

//and set selectedIndex
    [tabBarController setSelectedindex:2];
person jailani    schedule 14.02.2014
comment
работи, но други изгледи не. представен е само thirdView - person Pavel; 14.02.2014
comment
изобщо не са представени - person Pavel; 14.02.2014
comment
харесах публикацията ти. NSLog(@%@,self.navigationController); е нула - person Pavel; 14.02.2014
comment
Можете ли да редактирате кода си отново с това, което точно използвате сега? - person jailani; 14.02.2014

Може би нещо не е наред в добавянето на viewController? Добавям контролер като подизглед към основния изглед при натискане на бутон като този:

- (IBAction)buttonMessagePressed:(UIButton *)sender {
    messController = [[MessengerMenu alloc] initWithNibName:@"MessengerMenu" bundle:nil];
    [messController.view setFrame:CGRectMake(0, 50, 300, 200)];

    for (UIView *theView in self.currenWeatherView.subviews) {
        [theView removeFromSuperview];
    }

    [self.currenWeatherView addSubview: messController.view];
}
person Pavel    schedule 14.02.2014