Я пытаюсь создать своего рода иерархическую навигацию "слева направо" с помощью UINavigationController. Я использую этот код:

-(IBAction)showSettings:(id)sender {
UINavigationController *aNavController = [[UINavigationController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:aNavController animated:YES];

SecondView *secondView = [[SecondView alloc] initWithNibName:nil bundle:nil];
[aNavController pushViewController:secondView animated:NO];

UIBarButtonItem *aButton = [[UIBarButtonItem alloc] initWithTitle:@"Knapp" style:UIBarButtonItemStylePlain target:self action:@selector(nextView:)];
aNavController.topViewController.navigationItem.rightBarButtonItem = aButton;

[aButton release];
[secondView release];
[aNavController release]; }

-(IBAction)nextView:(id)sender {
ThirdView *thirdView = [[ThirdView alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:thirdView animated:YES];
NSLog(@"Push it like it's hot"); }

'nextView' вызывается правильно, «Push it as hot» печатается в «Output», но ничего не передается, новое представление не отображается. Я также пробовал изменить: [self.navigationController pushViewController:thirdView animated:YES]; на [self.navigationController popViewControllerAnimated:YES];, но результат остается прежним, ничего не происходит.

Мой вывод таков: я делаю что-то не так в части self.navigationController 'nextView', т.е. программа не знает, откуда / куда нажимать / выталкивать. Я сделал все возможное, чтобы просмотреть какую-то документацию по этому поводу, но я не могу с этим разобраться, так что я здесь.

Подходит ли self.navigationController или мне что-то не хватает в этой строке?

Заранее спасибо, Тобиас Товедал

1
Tobias Tovedal 26 Авг 2011 в 18:32

2 ответа

Лучший ответ

Когда вы используете self.navigationController, вы не получаете доступ к контроллеру навигации, определенному как aNavController в showSettings. self.navigationController относится к навигации, которая может быть задействована контроллером собственного просмотра. Я предполагаю, что представление, в котором определен этот код, не имеет NavigationController. Это означает, что self.navigationController указывает на ноль. Вы можете проверить это в методе nextView, выполнив NSLog(@"%@", self.navigationController);

Что вам нужно сделать, так это сделать aNavController переменной экземпляра в вашем файле заголовка, а затем вы можете сделать [aNavController pushViewController:thirdView animated:YES]; в своем методе nextView :.

1
Suhail Patel 26 Авг 2011 в 14:37

Кажется, ваша проблема

UINavigationController *aNavController = [[UINavigationController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:aNavController animated:YES];

Помещает новый контроллер представления модели в стек и не делает этот контроллер навигации текущим контроллером навигации контроллера представления;

Поэтому вам нужно установить текущий контроллер навигации контроллеров представления на aNavController или сделать aNavController переменной класса и использовать ее для отправки третьего представления.

0
Kaiser 26 Авг 2011 в 14:38