У меня проблема при отображении UIAlertController
типа UIActionSheet
в iPad. Я знаю, что iPad требуется больше информации для отображения всплывающего окна, но я борюсь с некоторыми странными проблемами.
Я проверяю проблемы совместимости iOS 13 с помощью своего приложения, и похоже, что старый трюк, например, получение представления с performSelector
на UIBarButtonItem
, больше не работает.
Способ 1
Итак, я делаю это.
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
UIView* internalView = (UIView*) [weakSelf.navigationItem.rightBarButtonItem performSelector:@selector(view)];
menuController.popoverPresentationController.sourceView = weakSelf.navigationController.navigationBar;
menuController.popoverPresentationController.sourceRect = internalView.frame;
menuController.popoverPresentationController.canOverlapSourceViewRect = YES;
}
internalView
кажется равным нулю вместо получения UIView в более старых версиях iOS. Всплывающее окно отображается в верхнем левом углу экрана, а не рядом с кнопкой панели навигации.
Способ 2
Итак, я пробую сделать это другим способом, на самом деле, "правильным" способом:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
menuController.popoverPresentationController.barButtonItem = weakSelf.navigationItem.rightBarButtonItem;
}
Когда я пытаюсь использовать этот код, приложение вылетает с сообщением, в котором объясняется, что я должен установить sourceView / sourceRect / barButtonItem. Но я говорю ему сделать это.
Завершение работы приложения из-за неперехваченного исключения «NSGenericException», причина: «Ваше приложение представило UIAlertController () стиля UIAlertControllerStyleActionSheet из UISmartNavigationController (). ModalPresentationStyle UIAlertController с этим стилем - UIModalPresentationPopover. Вы должны предоставить информацию о местоположении для этого всплывающего окна через popoverPresentationController контроллера предупреждений. Вы должны предоставить либо sourceView и sourceRect, либо barButtonItem. Если эта информация неизвестна, когда вы представляете контроллер предупреждений, вы можете предоставить ее в методе UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation.
Я тоже пробую с UIPopoverPresentationControllerDelegate
, но получаю те же результаты.
Я проверил и перепроверил, weakSelf.navigationItem.rightBarButtonItem
не равен нулю и установил на кнопку правой панели. Думаю, мне не хватает чего-то огромного, но что?