1

У меня есть альтернативный поток в моем приложении. Этот поток начинается в моем firstViewController, то в этой точке зрения, позвоните моему secondViewController так:Как добавить UINavigationController в UIViewController, представленный как Modal

- (IBAction)PressButton:(id)sender { 

    SecondViewController *second = [[SecondViewController alloc] init]; 
    second.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    UINavigationController *nav = self.navigationController; 
    [nav presentViewController:second animated:YES completion:nil];        
} 

В моей secondViewController я хочу выдвинуть свою thirdViewController. Но это не работает, я попытался это пути:

- (IBAction)pressButton:(id)sender { 

    ThirdViewController *tvc = [[ThirdViewController alloc] init]; 
    UINavigationController *nav = self.navigationController; 
    [nav pushViewController:tvc animated:YES]; 

}

При нажатии на кнопку secondViewController ничего не происходит.

Что я делаю неправильно?

Я использую:

  • OSX 10.8.2
  • Xcode 4.6
  • IOS 6,1

ответ

10

Вы должны представить навигационный контроллер по модулю и иметь второе представление в качестве корня этого навигационного контроллера. Так же как вызов presentViewController из представления владельца, а не его родительского контроллера навигации.

- (IBAction)PressButton:(id)sender { 
     SecondViewController *second = [[SecondViewController alloc] init]; 
     second.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:second]; 
     [self presentViewController:navigationController animated:YES completion:nil];  
    } 
+0

Работает как очарование! Благодаря ! – Sebastian

2

Вместо того, чтобы представлять только второй контроллер представления, убедитесь, чтобы представить дополнительные навигационный контроллер.

SecondViewController *secondViewController = [[SecondViewController alloc] init]; 

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:secondViewController]; 
[[self navigationController] presentViewController:navigationController animated:YES completion:nil]; 
+0

Привет, Аарон, спасибо за ответ. К сожалению, приложение падает, когда я это делаю. === >>> reason: 'Приложение попыталось представить модально активный контроллер .' – Sebastian

+0

Попробуйте изменить имя навигационного контроллера в моем примере на «secondNavigationController» или что-то в этом роде. Прямо сейчас вы представляете контроллер просмотра или в вашем случае контроллер навигации дважды. –

0

Если вы используете раскадровку просто нажмите на вид источника XIb, Ctrl + перетащить назначения (Создать SEGUE), выберите модальный из всплывающего menu.Click на вновь созданное соединение. Добавьте имя для него, затем в контроллер источника. [self performSegueWithIdentifier:@"Segue Name" sender:self];

0

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