2017-02-25 74 views
0

我有一個viewcontroller,當用戶點擊一個imageView時顯示爲彈出窗口。 問題是,我添加了一個按鈕來解僱它,但是當我點擊它時什麼也沒有發生。 代碼中,我已經是:嘗試關閉popover viewcontroller時沒有任何反應Swift

@IBAction func onCloseTapped(_ sender: Any) { 
presentedViewController?.dismiss(animated: true, completion: nil) 
} 

我試過也:dismiss(animated: true, completion: nil)等方法,但仍然一無所獲。

誰能告訴我,我做錯了什麼? 編輯:張貼截圖: enter image description here

編輯2:我是從情節串連圖板展示它,我添加了一個手勢識別在圖像上,他們從故事板添加SEGUE,指出存在酥料餅,然後錨到圖像。

+0

控制器是如何呈現的?你是否證實'onCloseTapped'方法實際上被調用? – rmaddy

+0

當用戶點擊圖像時,我正在呈現它。那麼我已經放了一個按鈕,並注意到它會發生,代碼是從上面相同。 –

+0

我不是問你什麼時候表演,但你表現如何。用相關代碼[編輯]你的問題,顯示你如何顯示你無法解僱的控制器。 – rmaddy

回答

0

它不起作用,因爲當你顯示爲彈出窗口時,viewController沒有navigationController。你必須創建一個委託方法,並在調用popover的viewController上使用dismiss函數。

這裏的爲例:

做酥料餅的委託,在酥料餅的viewController:

protocol PopoverViewControllerDelegate: NSObjectProtocol { 
    func dismiss() 
} 

然後創建一個委託變量,並調用當按鈕被點擊:

var delegate: PopoverViewControllerDelegate? 

@IBAction func onCloseTapped(_ sender: Any) { 
     delegate?.dismiss() 
} 

現在在調用彈出窗口的viewController中,您可以覆蓋準備用於設置popover代理的segue方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "popover" { 
      if let vc = segue.destination as? PopoverViewController { 
       vc.delegate = self 
      } 
     } 
    } 

現在你只需要使用委託解散你的酥料餅的viewController:

extension ViewController: PopoverViewControllerDelegate { 
    func dismiss() { 
     navigationController?.dismiss(animated: true, completion: nil) 
    } 
} 

不要忘了把標識符你Segue公司,我們使用的標識符此=「酥料餅」

希望對你有所幫助。