Прежде всего, я знаю, что это длинный вопрос. ГАРАНТИЯ ОТДЫХА Я попытался выяснить это самостоятельно (см .: StackOverflow # 2609318 ). Это сводит меня, Бэтти!
После попытки и неудачи в реализации моей собственной функции EDIT в стандартном moreNavigationController, я решил повторно реализовать свою собственную функцию MORE.
Я сделал следующее:
Добавить контроллер вида HOME, с которым я начинаю: initWithRootViewController
Добавьте 3 другие вкладки по умолчанию с помощью:
ResortsListViewController *resortsListViewController;
resortsListViewController = [[ResortsListViewController alloc] initWithNibName:@"ResortsListView" bundle:nil];
resortsListViewController.title = [categoriesDictionary objectForKey:@"category_name"];
resortsListViewController.tabBarItem.image = [UIImage imageNamed:@"whatever.png"];
resortsListViewController.navigationItem.title=@"whatever title";
localNavigationController = [[UINavigationController alloc] initWithRootViewController:resortsListViewController];
localNavigationController.navigationBar.barStyle = UIBarStyleBlack;
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[resortsListViewController release];
Они работают, когда я добавляю их на панель вкладок. (т.е. нажмите на них, и он перейдет к контроллеру представления)
Затем я добавляю свой собственный контроллер MORE на панель вкладок:
MoreViewController *moreViewController;
moreViewController = [[MoreViewController alloc] initWithNibName:@"MoreView" bundle:nil];
moreViewController.title = @"More";
moreViewController.tabBarItem.image = [UIImage imageNamed:@"more.png"];
moreViewController.navigationItem.title=@"More Categories";
localNavigationController = [[UINavigationController alloc] initWithRootViewController:moreViewController];
localNavigationController.navigationBar.barStyle = UIBarStyleBlack;
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[moreViewController release];
Тогда
tabBarController.viewControllers = localControllersArray;
tabBarController.moreNavigationController.navigationBar.barStyle = UIBarStyleBlack;
tabBarController.customizableViewControllers = [NSArray arrayWithObjects:nil];
tabBarController.delegate = self;
Это создает необходимые связи. Хорошо, пока все хорошо. Я получаю вкладку HOME, 3 вкладки категории и настраиваемую вкладку MORE - все это работает.
в контроллере представления вкладок БОЛЕЕ я реализую простое табличное представление, которое отображает все остальные вкладки в строках. ПОЭТОМУ я хочу иметь возможность переключать их в панель вкладок и из нее, я создал их ПРОСТО, как я делал вышеупомянутый resortslistviewcontroller (т.е. как контроллеры представления в массиве). Когда я вытаскиваю их для отображения заголовка в виде таблицы (чтобы пользователь мог перейти к этому «представлению»), я просто делаю следующее:
// [myGizmoClass CategoryArray] holds the array of view controller tab bar items that are NOT shown on the main screen.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
... etc...
UIViewController *Uivc = [[myGizmoClass plusCategoryArray] objectAtIndex:indexPath.row];
cell.textLabel.text = [Uivc title];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
Вот где оно проваливается:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
MyGizmoClass *myGizmoClass= [MyGizmoClass sharedManager];
UIViewController *tbi = [[myGizmoClass plusCategoryArray] objectAtIndex:indexPath.row];
NSLog(@"%@\n",[[tbi navigationItem ]title]);
[self.navigationController pushViewController:tbi animated:YES];
}
Это ошибка, которую я получаю («Банкоматы» - это заголовок для выбранной ячейки таблицы), поэтому я знаю, что заголовок Uivc вытягивает правильный заголовок и, следовательно, правильный «objectatindex»:
2010-04-09 11: 25: 48.222
MouseAddict [47485: 207] Банкоматы 2010-04-09
11: 25: 48.222 MouseAddict [47485: 207]
*** Завершение приложения из-за необработанного исключения
NSInvalidArgumentException, причина:
Нажатие на навигационный контроллер
не поддерживается '
БОЛЬШОЙ ВОПРОС: Как мне сделать связанный ВИД UIViewController *tbi
шоу и получить его в поле зрения?
Я догадываюсь, что UIViewController
- правильный класс для этого tbl
.. Я не уверен. НО я просто хочу получить представление, чтобы я мог поместить его в стек.
Может кто-нибудь PLZ помочь?
Чтобы ответить на вопрос kovpas ниже: myGizmoClass - это синглтон (синглтонский класс myGizmo от apple. Массив viewcontrollers хранится в том же виде, что и в [localControllersArray addObject:localNavigationController];
(в первом фрагменте кода выше) ). И он вставляет и извлекает его правильно, о чем свидетельствует тот факт, что когда я NSLOG [Uivc title]
, журнал печатает ATMs
. Это означает, что plusCategoryArray правильно хранит и извлекает viewController (если, действительно, это это то, что хранится).
Pushing a navigation controller is not supported
действительно беспокоит меня. Почему viewController
возвращает navigationController
и возможно ли принудительно navigationController
получить из него «толкаемое» представление ... или в navigationController
есть какой-то элемент, который является представлением?