UISplitViewController не вызывает методы делегирования при нажатии нового DetailView

#objective-c #ios #ipad #delegates #uisplitviewcontroller

#objective-c #iOS #iPad #делегаты #uisplitviewcontroller

Вопрос:

Я настраиваю раскадровку на основе приложения Master-Detail, встраиваю представление detail в контроллер навигации и добавляю новый объект контроллера представления таблицы, который я буду использовать в качестве второго контроллера представления detail.

Затем я запускаю новый контроллер представления деталей со следующим кодом (вместо перехода, потому что я одновременно запускаю как корневой вид, так и контроллер представления деталей. Отображается только код подробного представления).

 // Push the detailView view controller:
NewClass *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"test"];

newViewController.navigationItem.hidesBackButton = YES;
self.splitViewController.delegate                = newViewController;

[self.detailViewController pushViewController:newViewController animated:YES];
 

Это работает отлично, ЗА ИСКЛЮЧЕНИЕМ того, что методы делегирования SplitView никогда не вызываются до или после нажатия. Если я делаю это в портретном режиме, после того, как он нажимает DetailViewController, кнопка для выпадения всплывающего окна MasterView не отображается, пока я не переключусь в альбомный режим, а затем обратно в портретный режим.

Как я могу вызвать методы делегирования разделенного контроллера представления willHideViewController / willShowViewController или вручную вызвать их вызов?

Ответ №1:

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

Что вам нужно сделать, так это передать кнопку из контроллера представления представления, поскольку она уже привязана к всплывающему окну следующим образом:

 if(self.navigationItem.leftBarButtonItem != nil) {
    newViewController.navigationItem.leftBarButtonItem = self.navigationItem.leftBarButtonItem;
}

// Push the newViewController
 

Комментарии:

1. Спасибо за публикацию вашего решения. У меня была именно эта проблема, и она сводила меня с ума в течение нескольких дней. Не могли бы вы (если помните — я понимаю, что это было более года назад) показать мне, где вы «нашли, он не вызывает метод, потому что ориентация не изменилась»?

2. В нижней части ссылки на класс UISplitViewController ( developer.apple.com/library/ios/#documentation/uikit/reference / … ) в разделе Обсуждения двух методов говорится: «Когда контроллер представления поворачивается из книжной ориентации в альбомную» (или наоборот)…. Когда вы нажимаете новый контроллер представления, вы не вращаетесь.

3. Спасибо. Я предполагаю, что я делаю что-то, что не рекомендуется для решения этой проблемы, но это не демонстрация, поэтому я собираюсь посидеть над этим некоторое время.