1

У меня возникает проблема с одним из моих контроллеров и я надеюсь, что кто-то может мне помочь: моя раскадровка ведет себя так, как будто диспетчер представлений не существует, предотвращая меня от подключения к контроллеру.Недавно созданный UIViewController недоступен в раскадровке

Я создал пользовательский контроллер представления произвольной формы в раскадровке, его цель должна отображаться в popover, позволяя пользователю редактировать UITextLabel с помощью popter's UITextView.

Я динамически инстанцирование контроллера представления для использования пирога кода ниже:

//create a popover with a text view under a label to be edited, 
// allowing the user to edit the label with the popover 

       GLAppDelegate* appDelegate = (GLAppDelegate*)[[UIApplication sharedApplication] delegate]; 
       UIViewController *mvc = (UIViewController *)appDelegate.window.rootViewController; 
       PopoverTextViewController* textViewController = [mvc.storyboard instantiateViewControllerWithIdentifier:@"popoverTextViewController"]; 
       textViewController.textView.text = ((OutlinedLabel*)v.attributedView).text; 
       textViewController.label = (OutlinedLabel*)v.attributedView; 

       [self.popover dismissPopoverAnimated:YES]; 
       self.popover = [[UIPopoverController alloc] initWithContentViewController:textViewController]; 

       [self.popover presentPopoverFromRect:v.attributedView.frame inView:v permittedArrowDirections:UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown animated:YES]; 

Мне кажется, что контроллер представления я сделал это типичный контроллер вида:

enter image description here

Проблема, с которой я столкнулся, заключается в том, что автозаполнение ведет себя так, как будто в моем приложении нет такого контроллера просмотра. Даже если я вручную вставляю его здесь, я не могу подключить свойство textView из раскадровки к контроллеру представления.

enter image description here

Когда я проверить код, он работает - метка может быть отредактирована с пирогом, но я не могу установить текст в пироге, потому что я не могу связать вид текста на контроллер представления.

Я ценю вашу помощь!

+0

Я только что создал новый проект в Xcode 4.6.1 (4H512) и создал новый подкласс UIViewController. Класс был доступен в IB сразу после его создания. Возможно, ваш класс не соответствует типу вашего контроллера, например. это UITableViewController в IB, и вы пытаетесь сделать его UIViewController. – Adam

ответ

1

Я понял ответ, это композитная вещь из 3 штук.

  1. Я сделал «чистый» по проекту, а затем бросить Xcode и перезапустил - это очищает некоторые странные ошибки, и сделал работу в этом случае. Я был в состоянии добавить контроллер в раскадровке
  2. Я забыл IBOutlet рядом TextView: @property(nonatomic,strong)IBOutlet UITextView* textView;
  3. В случае пирога, свойство TextView равен нуль, пока viewDidLoad не вызывается после поповера представлен, поэтому код должен был быть переработан следующим образом:

    //create a popover under the label with a text view, allowing the user to edit the label with the popover 
    GLAppDelegate* appDelegate = (GLAppDelegate*)[[UIApplication sharedApplication] delegate]; 
    UIViewController *mvc = (UIViewController *)appDelegate.window.rootViewController; 
    PopoverTextViewController* textViewController = [mvc.storyboard instantiateViewControllerWithIdentifier:@"popoverTextViewController"]; 
    
    
    [self.popover dismissPopoverAnimated:YES]; 
    self.popover = [[UIPopoverController alloc] initWithContentViewController:textViewController]; 
    
    //before this call, all views of the controller are not loaded 
    [self.popover presentPopoverFromRect:v.attributedView.frame inView:v permittedArrowDirections:UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown animated:YES]; 
    
    //once popover is presented, the textView is created and is available 
    textViewController.textView.text = ((OutlinedLabel*)v.attributedView).text; 
    textViewController.label = (OutlinedLabel*)v.attributedView; 
    

Я надеюсь, что кто-то считает, что это полезно.