Как показать кнопку на RootViewController UINavigationController?
Вот мой код. Я хочу поместить кнопку возврата на открытие rootviewController.
- (void)selectSurah:(id)sender {
SurahTableViewController * surahTableViewController = [[SurahTableViewController alloc] initWithNibName:@"SurahTableViewController" bundle:nil];
[email protected]"Surah";
s[email protected]"Back";
UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:surahTableViewController];
[self presentModalViewController:aNavigationController animated:YES];
}
Ответы
Ответ 1
Я не считаю возможным вывести контроллер корневого представления из стека навигации, но вы можете подделать его с помощью UIButton
, добавленного как пользовательский вид UIBarButtonItem
:
UIButton *b = [[UIButton alloc]initWithButtonType:UIButtonTypeCustom];
[b setImage:[UIImage imageNamed:@"BackImage.png"] forState:UIControlStateNormal];
[b addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchUpInside];
self.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:b];
Подходящий PSD элементов интерфейса iOS можно найти здесь.
Ответ 2
Faizan,
комментарий Helium3 имеет смысл.
Я полагаю, что ваша кнопка нужна, чтобы отклонить контроллер, представленный по модулю, правда? Правильно, если я ошибаюсь.
Если это так, вы можете просто создать новый UIBarButtonItem
и установить левую (или правую) кнопку для UINavigationController
navigationItem
. Чтобы не разбить инкапсуляцию, создайте ее в методе viewDidLoad
для вашего контроллера SurahTableViewController
.
- (void)viewDidLoad
{
[super viewDidLoad];
// make attention to memory leak if you don't use ARC!!!
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Close"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(close:)];
}
-(void)close:(id)sender
{
// to dismiss use dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
// dismissModalViewControllerAnimated: is deprecated
[self dismissViewControllerAnimated:YES completion:^{ NSLog(@"controller dismissed"); }];
}
Ответ 3
Так как SurahTableViewController
является контроллером корневого представления в контроллере навигации, вы не можете вернуться к корню, потому что вы уже там. Поскольку вы представили его по-другому из-за чего-то другого, вам нужно поместить кнопку на навигационную панель с IBAction
, которая вызывает:
[self dismissModalViewControllerAnimated:YES];
Ответ 4
Внешний вид и поведение кнопки "Назад" в UINavigationController зависит от взаимодействия между стеком UINavigationControllers. Помещение кнопки возврата на первом контроллере нарушает это соглашение, туда нечего возвращаться, поэтому ваш код не работает.
Вам нужно будет вручную добавить UIBarButtonItem к штрих-коду заголовка, например:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)];
Если вы действительно хотите, чтобы он выглядел как кнопка "Назад" , вам нужно вручную создать UIBarButtonItem с изображением, которое отражает кнопку "Назад" .
Другое предложение, хотя похоже, что вы пытаетесь использовать кнопку "Назад" , чтобы отклонить контроллер модального представления, я бы придерживался чего-то более обычного, как кнопка "Закрыть" или "Готово", чтобы закрыть контроллер модального представления, Кнопка "Назад" действительно более подходит для навигации по стеку UINavigationControllers.