2015-01-06 47 views
2

我在寫我的第一個應用程序,使用斯威夫特,我需要一個可以在屏幕上觸摸的任何地方被解僱一個酥料餅或模式的看法。斯威夫特檢測觸摸任何地方

我寫一張欠條應用程序,我目前正在對用戶在其中輸入的貸款人的看法以及他們放貸。很顯然,每個貸方都需要一個唯一的名稱,並且每當用戶嘗試輸入同一個名稱兩次,要求他們更改名稱時,就會顯示彈出窗口或模式視圖。爲了減輕刺激因素,我想讓它可以讓用戶點擊屏幕上的任何位置來解除警告,而不是在特定的按鈕上。

我發現這個答案:Detect touch globally,我認爲它可能適用於我,但我對Objective-C一無所知,只是Swift,並且不知道該怎麼做。

回答

7

消除模態視圖變得非常容易。您只需致電dismissViewControllerAnimated(true, completion: nil)即可。因此,做我想要的,所有我需要做的,這是:

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) 
{ 
    dismissViewControllerAnimated(true, completion: nil) 
    super.touchesEnded(touches, withEvent: event) 
} 
0

我想這樣做,以便用戶可以點擊屏幕上的任何位置來解除警告,而不是在特定的按鈕上。

這可能是一個非常,非常糟糕的主意,你可能會遇到你的文本字段或其他元素的手勢的碰撞中模式的看法,或當他們意外解僱的模式可能會擾亂用戶,但嘿,無論你的船是否搖滾。

獲取模態視圖中最頂層視圖控制器的視圖。如果它是一個UINavigationController包含YourModalViewController,你可以這樣做在你的模式的viewDidLoad

if let navController = self.navigationController { 
    navController.view.addGestureRecognizer(UITapGestureRecognizer(...)) 
} 

再從手勢識別器的操作方法內解散你的模式。

0

我個人不知道,因爲我沒有使用過他們如何解僱酥料餅的,但我可以解決你的問題之一。你說你想在用戶觸摸屏幕上的任何地方的時候關閉彈出窗口或模式。這是一個在任何位置觸摸屏幕時觸發的功能,您可以在apple documents中閱讀更多關於它的信息。

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 

    } 
+0

謝謝!這只是我想要的功能! –

3

雨燕3.0

// Add this to your UIViewController class 

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

      //Do thing here 
     }