Как pushViewController, когда более одного tableViewControllers (без раскадровки)

Я не знаю, как реализовать подробное представление контроллера табличного представления, когда этот контроллер табличного представления появляется в результате взаимодействия пользователя с контроллером панели вкладок, который не является основным представлением для приложения. Думаю, мне нужно создать второй UINavigationController, но я не знаю, как интегрировать его в главный и подробный контроллеры представления, которые будут его использовать, хотя у меня есть навигационный контроллер, который работает с моим основным контроллером представления (EdgewoodSecretsMasterViewController)

(я читал PushViewController с tabBarController не работает)

Я пока не использую раскадровки.

Корневое представление моего приложения — это контроллер табличного представления с именем EdgewoodSecretsMasterViewController. Пользователь может выбрать строку в таблице, которую он заполняет, отобразить подробное представление и вернуться к табличному представлению EdgewoodSecretsMasterViewController.

У меня также есть панель вкладок в нижней части этого основного вида. Он имеет 3 варианта. Один из них — EdgewoodSecretsMasterViewController. Он появляется, когда пользователь запускает приложение. Пользователь может выбрать строку в таблице, просмотреть информацию об этом выборе в подробном представлении и вернуться к табличному представлению.

В делегате приложения я создаю vcMaster, класс EdgewoodSecrets.

 EdgewoodSecretsMasterViewController *masterViewController = [[EdgewoodSecretsMasterViewController alloc] initWithNibName:@"EdgewoodSecretsMasterViewController" bundle:nil];

 UINavigationController * vcMaster = [[UINavigationController alloc] initWithRootViewController:masterViewController];

Второй выбор панели вкладок — это информационный просмотр страницы информации об авторе. Пользователь может выбрать его и вернуться к исходному виду таблицы, но щелкнув первый выбор на панели вкладок.

WhoIsAuthor* vcAu = [[WhoIsAuthor alloc] init];

Эти два варианта работают так, как я хочу. Но не третья вкладка. Третья вкладка vcImportant

   ImportantMasterViewController* vcImportant = [[ImportantMasterViewController alloc] init];

   initWithNibName:@"ImportantMasterViewController"
   bundle:nil ];

Здесь я помещаю все варианты вкладок в контроллер панели вкладок.

   UITabBarController *tabBar = [[UITabBarController alloc] init];

   NSArray* controllers = [NSArray arrayWithObjects:vcMaster, vcAu,vcImportant,
                         nil];

   tabBar.viewControllers = controllers;
  [[self window] setRootViewController:tabBar];

Выбор третьей вкладки вызывает другое табличное представление — ImportantMasterViewController. Это табличное представление заполняется несколькими вариантами выбора, но когда пользователь делает выбор, директива pushViewController ничего не знает об исходном контроллере панели навигации. В точке нажатия self.navigationController не имеет значения. Я думаю, это потому, что контроллер панели вкладок является корневым контроллером представления. Так что я думаю, что это высший уровень/ответственность, я не знаю, как это сказать.

В PushViewController с tabBarController не работает

Я вижу, что Алок Сингх ответил: «Для каждой вкладки нужно создать отдельный навигационный контроллер».

Я могу создать второй объект UINavigationController в моем appDelegate. Но я не знаю, как его использовать, кроме как настроить его в делегате приложения, как это

 UINavigationController * ncImportant = [[UINavigationController alloc]      
      initWithRootViewController:importantMasterViewController];

Похоже, что где-то должен быть один стек, в котором хранится последний объект, который был помещен в буфер обмена. Кажется, я должен поместить все свои контроллеры представления в этот стек.

В EdgewoodSecretsMasterViewController я выдвигаю подробное представление следующим образом.

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

Появляется подробный вид. Пользователь может перемещаться вперед и назад.

В WhoIsAuthor я не вывожу подробный подчиненный вид

В ImportantMasterViewController я пытаюсь представить подробное представление следующим образом.

 [self.navigationController pushViewController:self.importantDetailViewcontrollers animated:YES];

Детальный вид не открывается. Я знаю, что казнь доходит до этого момента. Я также вижу, что
self.navigationController не имеет значения, как в EdgewoodSecretsMasterViewController на данный момент.

И это - если я правильно понимаю другую публикацию - потому что ему нужен собственный навигационный контроллер. Но я не знаю, как связать созданный мной навигационный контроллер (ncImportant) в делегате приложения с этим push-уведомлением.

Я не знаю, как обдумать это, или что пойти и прочитать, чтобы понять это.

Спасибо, Лорел.


person LaurelS    schedule 13.02.2014    source источник
comment
Посмотрите на мой ответ с примерами экранов. Если вам нужен код, пожалуйста, свяжитесь по электронной почте. Спасибо   -  person Balram Tiwari    schedule 13.02.2014


Ответы (2)


Вам нужно поместить все варианты вкладок в контроллер панели вкладок с ncImportant, а не vcImportant

UITabBarController *tabBar = [[UITabBarController alloc] init];

NSArray* controllers = [NSArray arrayWithObjects:vcMaster, vcAu,ncImportant,
                         nil];

tabBar.viewControllers = controllers;
[[self window] setRootViewController:tabBar];
person larva    schedule 13.02.2014
comment
Благодарю вас! Сейчас я занимаюсь обычными старыми ошибками. Я никогда не думал, что буду счастлив иметь свою кодовую бомбу. Но сейчас он движется мимо этой точки. - person LaurelS; 13.02.2014
comment
Позже... Представление не открывается, но контроллер навигации в контроллере представления важных сведений имеет значение. Я думаю, это прогресс. - person LaurelS; 13.02.2014

  1. Сделайте UITabBarController своим rootViewController.

  2. Добавьте все вкладки, на каждой вкладке вы можете инициализировать ее либо

    a) UINagivationController, который, в свою очередь, инициализируется экземпляром UIViewController. б) Или просто ваш UIViewContollers

  3. При загрузке приложения вы всегда можете выбрать конкретную вкладку, которая должна отображаться.

  4. Кроме того, вы можете использовать методы Push или Modal, чтобы отобразить OtherViewContollers1 в качестве сведений о выбранном элементе в одном из элементов TabBarController.

Посмотри это :

  • Это мой Root ViewController (панель вкладок с тремя вкладками)

введите здесь описание изображения

  • Это DetailViewController, в котором есть экземпляр UITableView. Он модально представлен на вкладке TabBar, когда я щелкаю элемент в приведенном выше представлении таблицы. введите здесь описание изображения

  • Посмотрите, как это представлено Modally.

    введите здесь описание изображения

Надеюсь, это поможет.

person Balram Tiwari    schedule 13.02.2014
comment
Весь приведенный выше код использует CustomViews, а не StoryBoards. Если вам нужен образец кода, свяжитесь со мной по адресу [email protected] и постарайтесь не использовать этот раздел комментариев Stackoverflow в качестве окна чата. :-) - person Balram Tiwari; 13.02.2014