2014-10-24 2 views
1

Я здесь немного рассола. У меня есть приложение, написанное для ios7.1, и теперь мы пытаемся сделать одно и то же приложение ios 8.1.Делегат представления в UIPopoverPresentationController не отвечает

В этом приложении у нас есть несколько popovers. Я исправился с тем, что они правильно отображались в качестве iOS8, но когда я нажимаю на popover, он не реагирует так, как ожидалось.

Вот как это представляется (все подключил в раскадровке):

в DashboardViewController:

if ([segue.identifier isEqualToString:@"showRHSMenu"]) { 
_rightNavController = segue.destinationViewController; 
_rightNavController.preferredContentSize = CGSizeMake(220, (_rightNavController.tableView.rowHeight * _rightNavController.dataArray.count)); 
_rightNavController.modalPresentationStyle = UIModalPresentationPopover; 
UIPopoverPresentationController *popoverPresentationController = _rightNavController.popoverPresentationController; 
popoverPresentationController.delegate = self; 

} 

в _rightNavController, протокол объявляется общаться с DashboardViewController. это работает и выполняется в ios7.1 с использованием UIPopoverController, но в iOS8.1 с использованием UIPopoverPresentationController оно не запускается.

Я подтвердил, что пользователь нажимает регистр вправоNavController, но протокол/делегат не выполняется.

Помогите пожалуйста?

ответ

0

Старый вопрос, но, надеюсь, это помогает кому-то другому.

Сегодня я столкнулся с той же проблемой, и решение заключалось в том, чтобы объявить контроллер popover как переменной экземпляра, а не локальной переменной. Как локальная переменная, он получает мусор, собранный в любое время после возвращения метода, независимо от того, по-прежнему отображается всплывающее окно. (Сбор мусора в iOS8 намного более агрессивен/эффективен, поэтому вероятность того, что у вас уже была, была обнаружена ошибка.) Держите дескриптор контроллера представления до тех пор, пока представление не будет уволено, и все методы делегатов должны работать нормально.

Смежные вопросы