UIPopoverController не отклоняется при нажатии на навигационную панель

При нажатии на правую панель управления, будет отображаться UIPopoverController.

Проблема заключается в следующем: при нажатии на NavigationBar этот UIPopoverController не отклоняется.

Почему? И есть ли способ разрешить это? Я попытался выполнить поиск, но ничего не могу найти об этом.

Спасибо заранее.

Ответы

Ответ 1

UIPopoverController кажется, добавляет панель навигации в свой массив passthroughViews, когда она представлена. Я смог решить проблему, повторно установив passthroughViews в пустой массив сразу после представления popover.

Ответ 2

При запуске с панели вы можете просто сделать это

[popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[popoverController setPassthroughViews:nil];

Ответ 3

Элементы на панели навигации будут автоматически добавлены в 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
    }
}

Ответ 4

Документация для UIPopoverController гласит:

При отображении краны за пределами всплывающее окно заставляет popover быть автоматически отклоняется. Чтобы разрешить пользователю взаимодействовать с указанным взглядов, а не отклонять popover, вы может назначить один или несколько просмотров Свойство passthroughViews. Краны внутри в окне popover нет автоматически приведет к тому, что popover будет уволен. Ваше мнение и мнение код контроллера должен обрабатывать действия и события внутри popover в явном виде и rejectPopoverAnimated: метод as необходимо.

Панель навигации добавляется как один из passthroughViews, когда popover отображается из элемента панели.

Возможно, попробуйте установить пустой массив в качестве свойства passthroughViews на вашем контроллере popover.

Ответ 5

Вы помещаете эту треску в любое другое действие или после завершения выбора или предоставления некоторой кнопки закрытия в popover и выполнения uy yhing,

[popOverControllerObj dismissPopoverAnimated:YES];

Ответ 6

Это ожидаемое поведение, насколько я могу судить. Попкор на книжной полке в iBooks ведет себя так. Сохраните ссылку на popover, когда вы ее представите, а затем отпустите, если какая-либо из кнопок на панели навигации нажата.