2013-04-23 2 views
3

Я новичок в разработке iPhone. Я создал приложение, которое использует навигационную панель с использованием раскадровки. Моя проблема в том, что я открываю viewB программно из viewA при нажатии кнопки и успешно. Теперь, чтобы вернуться к viewA я использовал кнопку отмены. когда я нажимаю кнопку отмены (предыдущий), открывается (viewA), но панель навигации не отображается. и viewA есть навигационная панель управление но видB нет.Навигационная панель скрыта, когда я возвращаюсь к просмотру в iOS

Заранее спасибо

View A

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    EditViewController *viewController = (EditViewController *)[storyboard instantiateViewControllerWithIdentifier:@"EditViewController"]; 

    [self presentViewController:viewController animated:NO completion:NULL]; 

Вид B:

- (IBAction)cancelButtonPressed:(id)sender { 
    if (lables != NULL) { 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
     ScannerViewController *viewController = (ScannerViewController *)[storyboard instantiateViewControllerWithIdentifier:@"ScannerViewController"]; 

     [self presentViewController:viewController animated:NO completion:NULL]; 

    } 
    else{ 

     [self.navigationController popViewControllerAnimated:YES]; 
    } 
+2

как вы показываете и закрываете вид B? делитесь своим кодом, если вам нужна помощь. – nsgulliver

+2

Из вида Вы представляете или выдвигаете viewB? – AMohan

ответ

4

Вы представляете viewB & выскакиваете его с помощью self.navigationController, вы должны использовать один из способов, либо использовать presentviewcontroller & dismissviewcontroller.

[self dismissViewControllerAnimated:YES completion:nil]; 

Для вашего сценария лучше всего использовать UINavigationController

например

Нажатие:

[self.navigationController pushViewController:viewController animated:YES]; 

Закрытие

[self.navigationController popViewControllerAnimated:YES]; 
+1

Спасибо, что работа. –

-1

Когда вам нужно (например, viewDidAppear method) use,

[self.navigationController setNavigationBarHidden:NO animated:YES]; 
+0

Я делаю это с помощью раскадровки для конкретного viewController –

0

Если вы используете раскадровку, вам не нужно программно представлять viewController. нажмите и удерживайте ctrl, перетащите с viewCA в viewCB и выберите модель из всплывающего меню.

Для отклоняя viewController

[self dismissViewControllerAnimated:YES completion:nil]; 

Если вы хотите послать какие-либо данные viewCB дают идентификатор SEGUE (например, "segid")

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([[segue identifier] isEqualToString:@"segid"]) 
    { 
     //write your code here. 
    } 
} 

Этот метод будет вызван автоматически (delegate) в то время как (нажатие) viewController.

+0

Спасибо, но я программно добавляю кнопку в панель навигации. на панели навигации нажмите кнопку i, чтобы открыть viewB. –

+1

затем также добавить кнопку в панель навигации в раскадровке. перетащите кнопку в навигационной панели. нажмите и удерживайте нажатой клавишу ctrl + перетащить с кнопки на viewCB. следовать, как указано выше. если вы хотите создать ibAction для этой кнопки и связать ее с кнопкой. – AMohan

0

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

[self dismissViewControllerAnimated:YES completion:nil]; 
Смежные вопросы