簡體   English   中英

點擊 NavigationBar 時 UIPopoverController 不會關閉

[英]UIPopoverController does not dismiss when clicking on the NavigationBar

單擊 rightBarButton 時,將出現一個 UIPopoverController。

問題是:單擊 NavigationBar 時,此 UIPopoverController 不會關閉。

為什么? 有沒有辦法解決它? 我試圖搜索,但找不到任何關於此的內容。

提前致謝。

UIPopoverController似乎在顯示時將導航欄添加到其passthroughViews數組中。 我能夠通過在呈現彈出框后立即將passthroughViews重新設置為空數組來解決問題。

從欄按鈕啟動時,您可以簡單地執行此操作

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

導航欄上的項目將自動添加到 popoverViewController 的 passthroughViews。 它發生在彈出窗口出現之后。 所以你需要在那之后清除 passthroughViews 。

而對於iOS 8,我們可以從UIViewController.popoverPresentationController中獲取popoverController,在此之前,我們可以從UIStoryboardPopoverSegue中獲取popoverController。

在您看來,controller 將視圖 controller 顯示為彈出窗口。

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
        }
    }
}

在您看來,controller 顯示為彈出框。

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的文檔指出:

顯示時,在彈出框 window 之外點擊會導致彈出框自動消失。 要允許用戶與指定的視圖交互而不關閉彈出框,您可以將一個或多個視圖分配給 passthroughViews 屬性。 在彈出框 window 內的點擊不會自動導致彈出框被關閉。 您的視圖和視圖 controller 代碼必須顯式處理彈出框內的操作和事件,並根據需要調用 dismissPopoverAnimated: 方法。

當從欄按鈕項呈現彈出框時,導航欄將作為passthroughViews之一添加。

也許嘗試在彈出框 controller 上設置一個空數組作為passthroughViews屬性。

您將此鱈魚放在任何其他操作上或完成選擇后或在彈出窗口中提供一些關閉按鈕並完成 uy yhing,

[popOverControllerObj dismissPopoverAnimated:YES];

據我所知,這是預期的行為。 iBooks 中書架上的彈出框的行為是這樣的。 呈現彈出框時保留對它的引用,然后在點擊導航欄中的任何按鈕時將其關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM