2012-07-01 5 views
11

Вот мой код. Я хочу поставить кнопку возврата на открывающий rootviewController.Как показать кнопку на RootViewController UINavigationController?

- (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]; 
} 
+0

Чтобы вернуться к месту? – jarryd

+2

Ответ очевиден. вернитесь туда, где вызывается текущийModalViewController. См. @Flex_Addicted ответ ниже. – shaikh

ответ

8

Я не верю, что это возможно поп контроллер представления корня выключения навигации стека, но вы можете подделать его с 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]; 

Подходящий СПМ Элементы пользовательского интерфейса iOS можно найти here.

+0

спасибо за ссылку PSD. – shaikh

2

Внешний вид и поведение кнопки возврата в UINavigationController зависит от взаимодействия между стеком UINavigationControllers. Помещение кнопки «Назад» на первом контроллере нарушает это соглашение, вернуться туда нечего, поэтому ваш код не работает.

Вам нужно вручную добавить UIBarButtonItem к штрих-кода заголовка, как:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(back:)]; 

Если вы действительно хотите, чтобы это выглядело как кнопка назад, вам необходимо вручную создать UIBarButtonItem с изображением который отображает обратную кнопку.

Другое предложение, хотя похоже, что вы пытаетесь использовать кнопку «Назад», чтобы отклонить контроллер модального представления, я бы придерживался чего-то более обычного, как кнопка «Закрыть» или «Готово», чтобы закрыть модальный вид контроллер. Кнопка «Назад» действительно более подходит для навигации по стеку UINavigationControllers.

+1

+1 для предложения «Закрыть» или «Готово». спасибо – shaikh

4

Поскольку SurahTableViewController является контроллером корневого представления в контроллере навигации, вы не можете вернуться к корню, потому что вы уже там. Так как вы представили его модально от чего-то еще, вам нужно поставить кнопку на панели навигации, которая имеет IBAction, который вызывает:

[self dismissModalViewControllerAnimated:YES]; 
5

Faizan,

Helium3 комментарий имеет смысл.

Я полагаю, что ваша кнопка необходима, чтобы отклонить контроллер, представленный модально, правда? Правильно, если я ошибаюсь.

Если это так, вы можете просто создать новый UIBarButtonItem и установить левую (или правую) кнопку для UINavigationControllernavigationItem. Чтобы не сломать инкапсуляцию, создайте ее в методе 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"); }]; 
} 
+0

это прекрасный ответ. работает супер здорово. – shaikh

+0

Извините за воскрешение мертвых (нить), но просто примечание: вы должны добавить кнопку в UIViewController, которая будет представлена ​​в UINavigationController, а не непосредственно в UINavigationController! Это заставило меня потратить час или около того :( – MacD

+0

@MadD Извините за задержку. Что значит? Кнопка прикреплена к панели навигации. Почему она не работает для вас? Спасибо заранее. –