2013-02-18 3 views
12
SettingsViewController *viewController = [[SettingsViewController alloc] init]; 
    [[self navigationController] pushViewController:viewController animated:YES]; 

При использовании этого кода в NavigationController показан только черный экран. В раскадровке отображается контент, но он не отображается на телефоне.PushViewController выводит на черный экран

+0

Пожалуйста, обратите внимание, что если вы не используете ARC, то вы протекаете viewController. –

+0

Скажите «анимированные: НЕТ». (Опираясь на ту же проблему, только на iOS 7.) –

ответ

1

Используйте это:

SettingsViewController *viewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:[NSBundle mainBundle]]; 
[[self navigationController] pushViewController:viewController animated:YES]; 
18

Попробуйте это:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
SettingsViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"setting"]; 
[self.navigationController pushViewController:viewController animated:YES]; 

указан идентификатор settingviewcontroller для "настройки"

+5

Вместо того, чтобы получать раскадровку с использованием жестко закодированного имени, можно получить раскадровку, с которой navController пришел, используя 'self.navigationController.storyboard' и исключив первую строку. – JohnQ

+0

ok .. Спасибо за ваше замечательное предложение. Мы также можем использовать self.view.storyboard для этого .. Happy Coding :) – shivam

+0

self.navigationController.storyboard вызывает проблему в моем случае, в swift – zaheer

0

попробовать этот

SettingsViewController *viewController = [[SettingsViewController alloc]initWithNibName:@"SettingsViewController" bundle:[NSBundle mainBundle]]; 
    [self.navigationController pushViewController:viewController animated:YES]; 
0

Я решил эту проблему, пользовательская инициализация o f.

Ваше назначение контроллера вид:

-(id) initWithSender:(UINavigationController*)sender 
{ 
     self=[sender.storyboard instantiateViewControllerWithIdentifier:@"DestinationVCIdentifier"]; 
    if (self) { 
     //custom initialisation 
    } 
    return self; 
} 

И использовать его:

DestinationVC *viewController = [[SettingsViewController alloc] initWithSender:self.navigationController]; 
[[self navigationController] pushViewController:viewController animated:YES]; 
+0

метода initWithSender не существует. – Dejan

+0

@Dejan yep, если вы не добавили его в свой контроллер просмотра – svvoff

1

Самый простой способ сделать это путем создания экземпляра с раскадровки. Вы должны дать ViewController раскадровки ID, а затем использовать следующий код:

YourView *view = [self.storyboard instantiateViewControllerWithIdentifier:@"YourViewID"]; 

Когда это будет сделано, просто нажмите:

[[self navigationController] pushViewController:view animated:YES]; 

Надеется, что это помогает.

0

Hi Вы должны установить свойство верхнего бара (панель навигации) на ineded для контроллера точки зрения. В моем случае я ранее устанавливал верхнюю панель как «Прозрачная навигационная панель»

Обычно это происходит, когда вы выполняете сеанс с модального контроллера.

0

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

Хотя, если вы используете раскадровки и ваш первоначальный ViewController на раскадровке, они, возможно, предпочел бы сделать следующее,

// Method in your initial viewcontroller 
- (void)youPushMethod { 

// Name your segue on your storyboard, e.g. SegueIndentifier 
[self performSegueWithIdentifier:@"SegueIndentifier" sender:self]; 
} 

Затем

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@“SegueIndentifier"]) { 
    SettingsViewController *settingsViewController= segue.destinationViewController; 
    } 
} 
Смежные вопросы