Поппер не указывает на кнопку
У меня есть приложение, совместимое с макетами iPhone и iPad. Для макета iPhone я создал Action Sheet и Pop Over для iPad. Проблема заключается в том, что поп-стрелка не указывает на кнопку, которую я нажал. Ниже мой код....
let actionSheet = UIAlertController(title: "Choose an option",
message: "Message",
preferredStyle: .ActionSheet)
...
if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad
{
// for iPad
actionSheet.popoverPresentationController?.sourceView = self.view
actionSheet.popoverPresentationController?.sourceRect = self.view.bounds;
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.allZeros;
}
self.presentViewController(actionSheet, animated: true, completion: nil)
Ответы
Ответ 1
Задайте sourceView
и sourceRect
как button
и button.bounds
.
Вы можете выбрать AllowArrowDirections в зависимости от расположения вашего представления.
actionSheet.popoverPresentationController?.sourceView = button
actionSheet.popoverPresentationController?.sourceRect = button.bounds;
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Left;
Если кнопка BarButtonItem использует этот код.
actionSheet.popoverPresentationController?.barButtonItem = button
actionSheet.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up;
Ответ 2
Для меня я работал с отправителем и кастом как UIView.
alertController.popoverPresentationController?.sourceView = sender as! UIView
alertController.popoverPresentationController?.sourceRect = sender.bounds
alertController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.Up
Ответ 3
SWIFT 3
Это работало для меня, когда моя кнопка была UIBarButtonItem:
if UIDevice.current.userInterfaceIdiom == .pad {
if controller.responds(to: "popoverPresentationController") {
controller.popoverPresentationController?.barButtonItem = YourUIBarButtonName
}
}
Ниже представлен фрагмент кода:
func presentActivitySheet() {
let controller = UIActivityViewController(activityItems: [document.fileURL], applicationActivities: nil)
if UIDevice.current.userInterfaceIdiom == .pad {
if controller.responds(to: "popoverPresentationController") {
controller.popoverPresentationController?.barButtonItem = YourUIBarButtonName
}
}
present(controller, animated: true, completion: nil)
}