2017-02-22 97 views
2

我是IOS編程的新手,當單擊按鈕時,使用按鈕方法中的以下代碼顯示視圖。IOS - 如何通過觸摸它的任何地方來隱藏視圖

@IBAction func moreButton(_ sender: Any) 
    { 
     self.helpView.isHidden = false 
    } 

最初,self.helpView.isHidden設置爲true在viewDidLoad方法來隱藏視圖。現在,我如何通過觸摸視圖外的任何地方來解除這個視圖。從研究中,我發現,它可以通過創建一個適合整個viewController的透明按鈕來完成。那麼通過點擊按鈕,我們可以使視圖消失。任何人都可以在swift 3中給我代碼來創建這樣的按鈕。或者,如果還有其他更好的隱藏視圖的方法,歡迎使用。

我正在使用Xcode 8.2,swift 3.0

在此先感謝。

+0

你閱讀應該是不錯的,方便的方式足以實現,您還可以重寫'touchesBegan'並檢查觸摸視圖是否爲視圖/或比較觸摸位置以隱藏它 – Tj3n

回答

12

在觸摸開始,你應該寫這樣

override func touchesBegan(_ touches: Set<AnyHashable>, withEvent event: UIEvent) { 
 
    var touch: UITouch? = touches.first 
 
    //location is relative to the current view 
 
    // do something with the touched point 
 
    if touch?.view != yourView { 
 
     yourView.isHidden = true 
 
    } 
 
}

+0

謝謝。通過這樣做,helpView不會通過觸摸來解除。如預期。 – Tester

+0

我可以知道確切的問題 –

+0

我希望helpView只有當我們觸及該視圖之外時纔會解散,而不是通過單擊該視圖本身。所以,我的意思是這段代碼和我預期的完全一樣。 – Tester

2

可以使用touchesBegan方法爲:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    self.helpView.isHidden = true 
} 
+0

感謝您的回覆。有用。 – Tester

0

,您可以創建其他的透明按鈕,或者,您的基本視圖(假設它下面的按鈕,一個單一的視圖),則可以解決你想做什麼。首先,你需要使它可以點擊。然後,您想要處理邏輯,以便點擊或未打開時發生的情況。

1

裏面的moreButton選擇,你可以做這樣的事情

@IBAction func moreButton(_ sender: Any) 
    { 
     self.helpView.isHidden = false 
     let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissView)) 
     view.addGestureRecognizer(tap) 
    } 

    func dismissView() { 
     self.helpView.isHidden = true 
     self.view.removeGestureRecognizer(tap) 
    } 
+0

感謝您的回覆。通過添加這個,我得到兩個錯誤。 「使用未解析的標識符'點擊'」和「類型'UIViewController'沒有成員'dismissView'」。我確定我已經添加了您建議的所有代碼。還有什麼我需要做的嗎? – Tester

+0

嗨。嘗試輸入view.view。我認爲你已經分配了view = ViewController。 –

+0

還聲明功能外的「tap」。讓tap:UITapGestureRecognizer = UITapGestureRecognizer(target:self,action:#selector(UIViewController.dismissView)),然後把@IBAction func moreButton(_ sender:Any) { self.helpView.isHidden = false view.addGestureRecognizer ) } –

相關問題