簡體   English   中英

關閉自定義彈出對話框

[英]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.

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