TabBarController NAvigationController и UIViewController - PullRequest
0 голосов
/ 15 июля 2009

У меня следующий вопрос:

В моем проекте у меня есть следующее:

UITabBarController

.... Некоторые UINAvigationControllers ....

* (1) UINavigationController

  UIViewController (UItableView) - When select one row it goes to...(by push) to:

              UIViewController (UItableView) - And here the same than before, for each row i open a new tableview....

Моя проблема в том, что когда я щелкаю элемент панели вкладок, я вижу представление viewController, как в прошлый раз, когда я видел это, и не перезагружаюсь к * (1) первому представлению в другой раз (как я хотел бы)

Где мне нужно писать sth каждый раз, когда я щелкаю элемент панели вкладок, я перезагружаю первый вид этого элемента панели вкладок.

PD: у меня есть вызов: [theTableView reloadData]; в методе "viewWillAppear".

То, что я делаю, это: В моем контроллере навигации у меня есть View Controller (например, tableview), и когда я щелкаю в одной строке, в методе didSelectRowAtIndexPath я создаю другой View Controller, вызывающий myController, и я нажимаю на этот элемент следующим образом ([[self navigationController] pushViewController) : myController animated: YES];) И это каждый раз, когда я кликаю в одной строке в следующих таблицах.

Тогда я думаю, что проблема не в том, чтобы перезагрузить табличное представление в методе viewWillAppear, а в том, чтобы вынуть с экрана следующий контроллер представлений, который я вставил в корневой.

Я прав?

В РЕЗЮМЕ:

Мое приложение имеет следующее:

  • Панель вкладок для перемещения между экранами
  • Навигация внутри каждой вкладки (насколько вы хотите), почему? потому что все tabBarItems показывают таблицы, и если вы щелкаете в одной строке, вы открываете другую таблицу, .....

Моя проблема в том, что я бы хотел вернуться к 1-й главной таблице, когда я нажал на панели вкладок. На данный момент приложение не делает этого, оно продолжает работу с экрана (представление таблицы), которое было последним посещением этой вкладки. (Это не совсем так, потому что, если я щелкаю два раза, да, он возвращается, но не входит в методы "viewWillLoad" или "didSelectViewController", потому что я создал NSLogs, а он их не показывает).

Эскиз может быть таким:

AppDelegate -> WelcomeScreen -> VideosTableViewController -> RElatedVideosTableViewController -> ..... ..... ....

Первое, что нужно показать экран приветствия (не так важно, только некоторые кнопки), и в этом классе у меня есть TabBArController, инициализированный с "localViewControllersArray", который является NSMutableArray для NavigationControllers, каждый из которых инициализируется одним ViewController.

Затем, когда я нажимаю одну из кнопок на этом экране приветствия, я показываю контроллер панели вкладок (показывает VideosTableViewController)

На следующем шаге, когда я щелкаю в одной строке, в «DidSelectRowAtIndexPath» я создаю RElatedVideosTableViewController и нажимаю это с помощью «[[self navigationController] push ....:« Анимированное представление таблицы связанных видео, которое я создаю ») : ДА];

И у меня также есть:

Добавить: UITabBarControllerDelegate Добавить:

  • (аннулируются) tabBarController: (UITabBarController *) tabBarController didEndCustomizingViewControllers: (NSArray *) viewControllers изменено: (BOOL) изменено {}

  • (аннулируются) tabBarController: (UITabBarController *) tabBarController didSelectViewController: (UIViewController *) ViewController {если ([viewController isKindOfClass: [UINavigationController учебный класс]]) {[(UINavigationController *) viewController popToRootViewController: NO]; [theTableView reloadData]; NSLog (@ "Reload"); }}

И при инициализации класса: [super.tabBarController setDelegate: self];

Но в консоли я не вижу NSLog, который я делаю, тогда не будет в этом методе.

1 Ответ

1 голос
/ 15 июля 2009

Заставьте ваше приложение делегировать делегат контроллера панели вкладок, либо в Интерфейсном Разработчике, либо в коде:

- (void)applicationDidFinishLaunching
{
    ...
    self.tabBarController.delegate = self;
}

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

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
      if ([viewController isKindOfClass:[UINavigationController class]])
      {
              [(UINavigationController *)viewController popToRootViewController:NO];
      }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...