Как заставить UIBarButtonItem вызывать «pushViewControllerAnimated: (BOOL)» для UINavigationController? - PullRequest
1 голос
/ 26 августа 2011

Я пытаюсь получить своего рода иерархическую навигацию "слева направо" с помощью 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 hot" печатается в "Output", но ничего не нажимается, новый вид не отображается. Я также попытался изменить: [self.navigationController pushViewController:thirdView animated:YES]; до [self.navigationController popViewControllerAnimated:YES];, но результат остается прежним, ничего не происходит.

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

Является ли self.navigationController правильным способом сделать это или я что-то упустил в этой строке?

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

Ответы [ 2 ]

1 голос
/ 26 августа 2011

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

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

0 голосов
/ 26 августа 2011

Похоже, ваша проблема

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

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

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

...