Ответ 1
UIPopoverController
кажется, добавляет панель навигации в свой массив passthroughViews
, когда она представлена. Я смог решить проблему, повторно установив passthroughViews
в пустой массив сразу после представления popover.
При нажатии на правую панель управления, будет отображаться UIPopoverController.
Проблема заключается в следующем: при нажатии на NavigationBar этот UIPopoverController не отклоняется.
Почему? И есть ли способ разрешить это? Я попытался выполнить поиск, но ничего не могу найти об этом.
Спасибо заранее.
UIPopoverController
кажется, добавляет панель навигации в свой массив passthroughViews
, когда она представлена. Я смог решить проблему, повторно установив passthroughViews
в пустой массив сразу после представления popover.
При запуске с панели вы можете просто сделать это
[popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[popoverController setPassthroughViews:nil];
Элементы на панели навигации будут автоматически добавлены в popoverViewController passthroughViews. Это происходит после появления popover. Поэтому вам нужно очистить passthroughViews после этого.
И для iOS 8 мы можем получить popoverController из UIViewController.popoverPresentationController, до этого мы можем получить popoverController из UIStoryboardPopoverSegue.
В вашем представлении контроллер представляет контроллер представления как popover.
var popoverController: UIPopoverController?
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Before IOS8, we need to get reference of popOverController from UIStoryboardPopoverSegue
if (!self.respondsToSelector(Selector("popoverPresentationController"))) {
if let popoverController = (segue as? UIStoryboardPopoverSegue)?.popoverController {
let menuViewController = segue.destinationViewController as AIMSMenuTableViewController
menuViewController.popoverController = popoverController
}
}
}
В вашем представлении контроллер, представленный как popover.
var popoverController: UIPopoverController?
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
// Set passthroughViews to nil make tapping other navigation bar button
// dismiss presenting popoverController
if (self.respondsToSelector(Selector("popoverPresentationController"))) {
self.popoverPresentationController?.passthroughViews = nil
} else {
// For iOS8-pre version, we need to pass popoverController reference from segue
self.popoverController?.passthroughViews = nil
}
}
Документация для UIPopoverController
гласит:
При отображении краны за пределами всплывающее окно заставляет popover быть автоматически отклоняется. Чтобы разрешить пользователю взаимодействовать с указанным взглядов, а не отклонять popover, вы может назначить один или несколько просмотров Свойство passthroughViews. Краны внутри в окне popover нет автоматически приведет к тому, что popover будет уволен. Ваше мнение и мнение код контроллера должен обрабатывать действия и события внутри popover в явном виде и rejectPopoverAnimated: метод as необходимо.
Панель навигации добавляется как один из passthroughViews
, когда popover отображается из элемента панели.
Возможно, попробуйте установить пустой массив в качестве свойства passthroughViews
на вашем контроллере popover.
Вы помещаете эту треску в любое другое действие или после завершения выбора или предоставления некоторой кнопки закрытия в popover и выполнения uy yhing,
[popOverControllerObj dismissPopoverAnimated:YES];
Это ожидаемое поведение, насколько я могу судить. Попкор на книжной полке в iBooks ведет себя так. Сохраните ссылку на popover, когда вы ее представите, а затем отпустите, если какая-либо из кнопок на панели навигации нажата.