Подтвердить что ты не робот

UIActionSheet из Popover с iOS8 GM

Кто-нибудь получает это сообщение, пытаясь показать UIActionSheet из popover?

Ваше приложение представило UIAlertController() стиля UIAlertControllerStyleActionSheet. ModalPresentationStyle UIAlertController с этим стилем - UIModalPresentationPopover. Вы должны предоставить информацию о местоположении для этого popover через контроллер предупреждения popoverPresentationController. Вы должны указать либо sourceView, и sourceRect, либо barButtonItem. Если эта информация неизвестна при представлении контроллера предупреждений, вы можете предоставить ее в методе UIPopoverPresentationControllerDelegate -prepareForPopoverPresentation.

Ранее к GM я использовал некоторое обходное решение для преобразования UIActionSheet в UIAlertController, и это работает нормально. Однако кажется, что Apple пыталась решить проблемы с UIActionSheet, и я не хотел использовать свое обходное решение, но кажется, что у меня нет выбора...

4b9b3361

Ответ 1

Для поддержки iPad включите этот код:

alertView.popoverPresentationController?.sourceView = self.view
alertView.popoverPresentationController?.sourceRect = self.view.bounds
// this is the center of the screen currently but it can be any point in the view

self.presentViewController(alertView, animated: true, completion: nil)

Ответ 2

Если вы представляете лист действий после того, как пользователь делает выбор в ячейке в пределах UITableView. Я обнаружил, что это работает прилично:

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Directions" 
                                                               message:@"Select mode of transportation:"
                                                        preferredStyle:UIAlertControllerStyleActionSheet];
alert.popoverPresentationController.sourceView = cell;
alert.popoverPresentationController.sourceRect = cell.bounds;
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
//...
[self presentViewController:alert animated:YES completion:nil];

Ответ 3

Вам нужно предоставить popoverPresentationController для поддержки iPad. В этом случае вы указываете barButtonItem или sourceView. Этот другой поток может помочь вам: Swift UIAlertController - ActionSheet iPad iOS8 сбой

Ответ 4

На самом деле это что-то нехорошее (я считаю) в Xcode для iPhone и iPad сейчас.

  • В iPhone тот же самый код работает отлично, и вы можете видеть предупреждающее сообщение в том же месте (всегда). Но для IPad вам нужно определить положение окна предупреждения с alert.popoverPresentationController.sourceView = self.view; alert.popoverPresentationController.sourceRect = CGRectMake(self.view.bounds.size.width / 2.0 - 105, self.view.bounds.size.height / 2.0 + 70, 1.0, 1.0); 105 и 70 являются приближенными размерными различиями для IPad портретного дизайна в связи с различной точкой привязки.
  • В iPhone дизайн UIAlertController поставляется с "Modal View", но, к сожалению, если вы используете тот же код для iPad, это не будет "Modal View". Это означает, что вам нужно написать дополнительный код для отключения прикосновений в дизайне iPad. Я думаю, это странно.
  • В дизайне iPad вам нужно учитывать, что опорная точка отличается. Это точка треугольника пузыря, а не верхняя левая сторона AlertView.

Это странные вещи, которые я вижу. Я думаю, что должен быть стандарт, и если кто-то хочет выйти из стандартов, хорошо, могут быть и другие варианты.

Ответ 5

UIAlertController - это только iOS8, и мне нужно поддерживать iOS7, я использую его. Я наткнулся на это на вид мастера в макете "Мастер/Деталь" на iPad. Я смог обойти это (не совсем исправлять), подняв UIActionSheet из родительского UISplitViewController, используя [actionSheet showInView:]. Удачи.