Проблемы с добавлением UIViewController в UINavigationController

Мой RootViewController - это UITableViewController. Программно добавляется UINavigationController:

_navigationController = [[[UINavigationController alloc] initWithRootViewController:_rootViewController] autorelease];
[self.window addSubview:_navigationController.view];
[self.window makeKeyAndVisible];

В RootViewController.m должен загружаться DetailViewController при выборе строки:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSLog(@"Switch to detail");
  CCouchDBDocument *selectedObject = [self.contentsList objectAtIndex:indexPath.row];
  DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
  [self.view addSubview:detailViewController.view];
  [detailViewController setDetailItem: selectedObject]; 
  [self.navigationController pushViewController:detailViewController animated:YES];
  [detailViewController release];
}

Без addSubView на экране ничего не происходит. Все примеры, которые я видел раньше, используют только pushViewController. А загрузка DetailView занимает около 4 секунд. Это слишком долго (сейчас пусто, всего одна метка). Когда я пытаюсь установить navigationTitle (self.title = @ "Hello";), заголовок остается таким же из RootViewController, поэтому что-то не так с navigationController.

Я попытался поместить все в AppDelegate и использовать switchView. Проблема заключается в вызове setDetailItem, который я не могу вызвать, если работаю с методом переключения.

Каким будет правильный способ загрузить DetailView из RootViewController в стек навигации и, возможно, больше из DetailViewController позже?

Обновление. Я снова начал с самого начала с оконного приложения. Добавил UITableViewController как «RootViewController» и инициализировал его с помощью UINavigationController в AppDelegate (ничего не сделал в XIB). Когда я пытаюсь установить self.navigationController.title = @ "Test"; в ViewDidLoad ничего не происходит.

Что там не так?


person Patrick    schedule 10.06.2011    source источник


Ответы (1)


Вы не устанавливаете заголовок DetailView, когда он отображается с помощью UINavigationController с помощью self.title, вам необходимо установить свойство заголовка UINavigationItem в инициализаторе DetailView.

например в инициализаторе DetailView: -

self.navigationItem.title = @"Hello";

Вы правы, вам не нужно добавлять представление detailViewController в качестве подвида текущего представления - вам просто нужен вызов pushViewController. Я не уверен, почему он не появляется.

Возникает очевидный вопрос: все ли в пике подключено нормально и что делает инициализатор DetailView?

person Adrian B    schedule 10.06.2011
comment
Нет, тоже не изменилось. Что-то там серьезно не так. - person Patrick; 10.06.2011
comment
Это self.navigationItem.title, которое вам нужно изменить, я думаю, не self.navigationController.title - также, если вы создаете представления программно, вам может потребоваться установить его в loadView (я использую перья и установив его в initWithNibName :) - person Adrian B; 15.06.2011
comment
Были и другие проблемы. Настроил с нуля и теперь все нормально. Спасибо! - person Patrick; 16.06.2011