Мой viewController не отображается правильно

в своем приложении для iPad я пытаюсь представить одно из своих представлений в модальном стиле формы. Вот код:

-(void)present
{
    SecondViewController *modal = [[SecondViewController alloc]init];
    modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
    [self presentModalViewController:modal animated:YES];
}

Я использую раскадровку, и я поместил такие вещи, как textView и панели инструментов, в представление, которое я хотел бы показать. Я установил правильный класс в Identity Inspector, и в файлах классов я проверил, что это правильный вид, поставив NSLog(@"Right view");

При вызове пустоты присутствует вид появляется, но только в виде темно-белого квадрата. В нем нет ничего из моего контента из раскадровки, я даже пытался изменить цвет фона представления и textView, чтобы увидеть, не было ли что-то за пределами квадрата, но все это оставалось белым. Такое ощущение, что он не использует представление, которое я создал в раскадровке, но я установил для него правильный класс, и NSLog распечатывается при его вызове. Я никак не связывал два представления в раскадровке, SecondViewController просто плавает, так что может быть проблема? Кнопка, которая вызывает -(void)present, создается программно, поэтому я также не могу Ctrl + перетащить ее на кнопку.

Почему он показывает пустую версию моего класса?


person Sti    schedule 08.01.2013    source источник


Ответы (2)


В «Инспекторе удостоверений» установите «Идентификатор раскадровки» для вашего ViewController, а затем представьте его следующим образом:

-(void)present
{
    SecondViewController *modal = [self.storyboard instantiateViewControllerWithIdentifier:@"myStoryboardID"];
    modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
    [self presentModalViewController:modal animated:YES];
}

И если вы используете iOS6, presentModalViewController:animated: устарела, поэтому используйте это:

 -(void)present
    {
        SecondViewController *modal = [self.storyboard instantiateViewControllerWithIdentifier:@"myStoryboardID"];
        modal.modalPresentationStyle = UIModalPresentationStyleFormSheet;
        [self presentViewController:modal animated:YES completion:nil];
    }
person jhilgert00    schedule 08.01.2013

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

Есть несколько способов решить вашу дилемму:

  • Добавьте модальный переход в качестве перехода в контроллере представления, это будет самый простой способ, и это то, что раскадровки iOS ожидают от вас.
  • Переместите представление из раскадровки во внешний .xib и вызовите метод initWithNibName:bundle:, чтобы загрузить его в качестве представления вашего контроллера представления. Это лучшее решение, если вы просто хотите программно загрузить представление.
  • Загрузите представление из вашей раскадровки программно с помощью метода instantiateViewControllerWithIdentifier:, это, вероятно, плохая идея, поскольку она противоречит дизайну раскадровки.

Я могу уточнить их, если хотите.

person rpowell    schedule 08.01.2013