2013-03-02 138 views
1

我有一個UITextField(密碼字段),有時需要幾次觸摸來顯示鍵盤。這似乎只發生在您點擊佔位符文本的位置時。這是視圖層次結構的一個鏡頭,對我來說似乎可以。有時我的UITextField對觸摸沒有反應,爲什麼?

View Hierarchy

Button Position

任何想法要尋找什麼別的了,所以我可以弄清楚爲什麼會這樣?


編輯

所以我想通了,問題是什麼,它在未來的一段代碼leftView

UIView *pwPaddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 38)]; 
    self.passwordField.leftView = pwPaddingView; 
    self.passwordField.leftViewMode = UITextFieldViewModeAlways; 

這似乎防止潤色大約前三'密碼'的字符。它在那裏的原因是填補了領域的左側,所以這個詞是不正確的左邊緣。我還有什麼替代方法可以允許觸摸檢測或以不同的方式填充字段?

+0

有什麼了呢?一個標籤什麼的..? – 2013-03-02 16:48:39

+0

沒有關於它的任何東西 – conorgriffin 2013-03-02 17:30:47

+0

您是否添加了任何手勢識別器?在調試器中鍵入「po [[UIWindow keyWindow] recursiveDescription]」並檢查視圖層次 – 2013-03-02 17:35:33

回答

1

創建的UITextField一個子類,並設置密碼字段是這個班的故事板。裏面的新類中重寫以下方法,像這樣

// placeholder position 
- (CGRect)textRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds , 10 , 0); 
} 

// text position 
- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds , 10 , 0); 
} 

,並從的viewController代碼刪除下面的代碼:

UIView *pwPaddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 38)]; 
self.passwordField.leftView = pwPaddingView; 
self.passwordField.leftViewMode = UITextFieldViewModeAlways; 

這墊細胞,但並不妨礙觸摸檢測

1

您是否已將其設置爲不取消視圖中的其他觸摸?

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
tap.cancelsTouchesInView = NO; //add this line 
[self.view addGestureRecognizer:tap]; 
+0

似乎沒有任何區別 – conorgriffin 2013-03-03 14:56:00

1

要停止左視圖吞吐點擊事件,你可以在視圖上設置userInteractionEnabled爲NO,例如

UIView *pwPaddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 38)]; 
pwPaddingView.userInteractionEnabled = NO; 
self.passwordField.leftView = pwPaddingView; 
self.passwordField.leftViewMode = UITextFieldViewModeAlways; 
0

調用

[自resignFirstResponder]

在我的ViewController具有的UITextField幫助解決週期性unresponsives到觸摸

相關問題