2017-02-26 57 views
0

我已經在自定義UIViewController下面的代碼:UITapGestureRecognizer斯威夫特不點火3

let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 

func dismissTap() { 

    print("Tap!") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.view.addGestureRecognizer(tapDismissTextField) 
    self.friendsView.addGestureRecognizer(tapDismissTextField) 
} 

沒有 「點擊」!線正在打印,所以手勢識別器不會觸發。可能會出現什麼問題?

啓用用戶交互是true橫跨此控制器中的所有視圖。

此視圖控制器嵌入UINavigationController如果有任何幫助。

+0

這不是正確的語法,我也不知道你的代碼沒有拋出錯誤,因爲沒有'UITapGestureRecogniser',只有'UITapGestureRecognizer'(帶'z',而不是's') –

+0

道歉,這些都是現在az – Legatro

+0

,它更好。拼寫非常重要。 –

回答

1

只有在加載視圖後,才需要指定自己。

var tapDismissTextField: UITapGestureRecognizer! 

並在viewDidLoad方法:

override func viewDidLoad() { 
    super.viewDidLoad() 
    tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 
    view.addGestureRecognizer(tapDismissTextField) 
} 
1

1.移動這一行:

let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 

內部viewDidLoad(),因爲self的方法/函數外/閉包返回一個(NSObject) ->() -> YourClass() (一個NSObject),而不是你的班級,實際上是view的擁有者。

2.我建議只留下一個鑑於GestureRecognizer

1

添加tapDismissTextField到viewdid負載

override func viewDidLoad() { 
    super.viewDidLoad() 
let tapDismissTextField = UITapGestureRecognizer(target: self, action: #selector(dismissTap)) 
    self.view.addGestureRecognizer(tapDismissTextField) 
    self.friendsView.addGestureRecognizer(tapDismissTextField) 
} 
0

這不是坐上UITextField工作的方式。我想你確實將setUserInteraction更改爲false以防止UITextField行爲。對?這就是爲什麼你的手勢識別器不起作用。

所以,你需要給予,因爲你看到我們現在處於兩難境地。我們希望手勢工作,我們不希望UITextField行爲正常。我們需要知道你所取得的成就,以便更好地幫助你。

信息:

如果wonna顯示自定義視圖。例如UIPickerView設置 inputView屬性爲您的UITextField並刪除您的手勢 識別器。

解決方法:

您可以使用點擊手勢上UITextField上海華。並且,嘗試 檢測是否水龍頭位於UITextField的框架內。 example

另一種解決方法:

嘗試做的textFieldDidBeginEditting委託 方法你的行動。並做一些調整來禁用鍵盤。可能會將 inputView設置爲零。

所以,我們需要確切地知道你想要達到什麼樣的目的,才能給你正確的解決方案。