2010-03-21 2 views
6

вот мой код:presentModalViewController не работает

ViewController *vc = [[ViewController alloc] initWithNibName:@"TableView" bundle:nil]; 
[self.navigationController presentModalViewController:vc animated:YES]; 
//[self setView:[vc view]]; 

Если я это называю, ничего не происходит. Однако, если я изменю его на:

ViewController *vc = [[ViewController alloc] initWithNibName:@"TableView" bundle:nil]; 
//[self.navigationController presentModalViewController:vc animated:YES]; 
[self setView:[vc view]]; 

Вид выглядит просто отлично (без перехода, конечно). Что я делаю неправильно? Есть ли что-то особенное, о чем вы должны заботиться при инициализации контроллера вида? Я попытался скопировать как можно больше из примеров Apple, но я не могу заставить это работать ...

Спасибо за любой ввод!

- Ry

ответ

24

Вы можете только просматривать настоящие модальный контроллеры от контроллеров, которые уже были показаны на экране (как правило, через UINavigationController или UITabBarController). Попробуйте создать UINavigationController, нажав на него viewController, и , затем, представляя ваш модальный контроллер. В Xcode есть стартовый проект, который показывает, как создать поток, основанный на UINavigationController, если вы не знакомы с ним.

Еще одно замечание: если вы не нажали контроллер вида на UINavigationController, свойство .navigationController будет равно нулю, а обмен сообщениями не будет иметь никакого эффекта.

+0

Мех. Разве нет более простого способа сделать это? Я действительно не хочу создавать UINavigationController только для того, чтобы показывать слайд ... Спасибо за ваш ответ! – ryyst

+0

Для этого вам не нужно создавать навигационный контроллер, но вы ссылаетесь на него здесь. Если у вас есть контроллер вида, вы можете просто использовать ИТ для представления модального контроллера представления (т. Е. Избавиться от «.navigationController», если ваш пример кода выше. Вам нужно будет добавить вид viewController в основное окно, чтобы сделать это работа –

+4

+1 сохранила мою жизнь только сейчас:: ' –

1

Я столкнулся с такой же проблемой, пытаясь показать модальный вид на другой вид модальности. Ответ Бен является правильным, и может быть реализован следующим образом:

@interface FirstView: UIViewController { 

    UIViewController *firstView; 
} 

- (IBAction)showOptionsView:(id)sender; 

@end 

В главном классе вида:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    firstView = [[UIViewController alloc]init]; 
    [firstView setView:self.view]; 
    [firstView setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
} 

- (IBAction)showOptionsView:(id)sender { 
    OptionsView *optView = [[OptionsView alloc]initWithNibName:@"OptionsView" bundle:nil]; 

    if(firstView != nil) { 
     [firstView presentModalViewController:optView animated:YES]; 
     [optView release]; 
} 
Смежные вопросы