2016-10-17 9 views
-1

У меня есть UITableViewController в UINavigationController, который я хочу показать в popover view и заполнить поля в viewController.ios10 prepareForSegue popoverPresentationController ObjC

Раскадровка выглядит как рис. Левый VC вызывает editIdeaSeque на кнопке навигации.

enter image description here

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"editIdeaSegue"]) { 
     UINavigationController *nvc = segue.destinationViewController; 
     if (!isIpad) { 
      EditIdeaTVC* edi = (EditIdeaTVC*)[nvc.viewControllers objectAtIndex:0]; 
      if (edi != nil) 
       edi.editIdea = sender; 
      } 
     else { 
      UINavigationController* nc = (UINavigationController*)[[segue.destinationViewController popoverPresentationController] presentedViewController]; 
      EditIdeaTVC* edi = (EditIdeaTVC*)[nc.viewControllers objectAtIndex:0]; 

      if (edi != nil) 
       edi.editIdea = sender; 
      } 
    } 
} 

Моя готовиться Segue работает на Iphone, который похож макет раскадровки. Авария части Ipad вызывает edi - это указатель на мусор.

-[EditIssueTVC setEditIdea:]: unrecognized selector sent to instance 0x157d6c7a0 

Я ожидал, что presentedViewController будет UINavigationController ...

ответ

0
UINavigationController* nc = (UINavigationController*)[[segue.destinationViewController popoverPresentationController] presentedViewController]; 

Вы чрезмерно думать, что это. Контроллер навигации является контроллером вида назначения. Ситуация идентична вашей ранее кода:

UINavigationController *nvc = segue.destinationViewController; 

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

+0

Ну, это было первое, что я пробовал и видел, что приложение рушилось, поэтому я начал копаться в popoverPresentationController. – Gossamer

+0

Что я говорю: удалите всю проверку iPad. Все дело в том, что эта вещь будет вести себя как на iPhone, так и на iPad. Сеге - это сегу. Пункт назначения - это пункт назначения. Ваш код будет работать одинаково на обоих устройствах без какой-либо проверки. – matt