[英]Dismiss custom popover dialog
在其區域之外點擊時,我需要關閉模式對話框。 當在情節提要中定義視圖並按以下方式顯示時,此方法將自動工作:
let storyboard = UIStoryboard(name: "Services", bundle: nil)
let pinCodeController = storyboard.instantiateViewController(withIdentifier: "PinCodeController")
pinCodeController.modalPresentationStyle = .popover
pinCodeController.preferredContentSize = CGSize(width: 200, height: 300)
let presentationController = pinCodeController.popoverPresentationController
presentationController?.sourceView = pinCodeButton
self.present(pinCodeController, animated: true)
但是,由於我不使用情節提要,因此我幾乎使用相同的代碼來表示我的觀點。 該代碼顯示了視圖,但是在其邊界之外點擊時不會消失。
popoverFromSourceController.modalPresentationStyle = .popover
popoverFromSourceController.preferredContentSize = CGSize(width: 200, height: 300)
let presentationController = popoverFromSourceController.popoverPresentationController
presentationController?.sourceView = self.popoverFromSourceViewButton
present(popoverFromSourceController, animated: true)
誰能看到區別是什么以及為什么行為不同? 我是否需要以某種方式將click事件添加到基礎視圖以消除彈出窗口?
我有相同的問題,但是從UIBarButtonItem呈現相同的彈出窗口時有些不同。 我的導航控制器有兩個條形按鈕,當通過第一個按鈕顯示對話框時,單擊第二個按鈕后它將自動關閉。 但是,單擊主視圖不會關閉該對話框。
完整的源代碼: https : //github.com/igunther/CleanController
任何人?
更新資料
添加了以下代碼,但仍無法正常工作:
popoverFromSourceController.isModalInPopover = false
對於未來的讀者:所呈現的代碼是可行的,因為首先是啞光注釋。 問題是模擬器無法運行,需要重新啟動。 案件結案。
我想知道-您是否嘗試過使用UITapGestureRecognizer實現行為?
例如:
func viewDidLoad() {
let dismissTapGesture = UITapGestureRecognizer(target: self, action: #selector(dismissPopover(_:)))
view.addGestureRecognizer(dismissTapGesture)
}
// This is invoked if the user taps anywhere outside the modal bounds.
@objc func dismissPopover(_ sender: UITapGestureRecognizer) {
if sender.state == UIGestureRecognizerState.Ended {
let point = sender.location(in: view)
if !self.view.frame.contains(point) {
// We have tapped outside the popover
}
}
}
我尚未測試此代碼,但它應該可以正常工作。 另外,也可以嘗試將手勢識別器添加到顯示彈出窗口的VC中,而不是在彈出窗口視圖上添加手勢識別器。 希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.