2013-03-02 3 views
1

У меня есть UITextField (Поле пароля), которое иногда занимает несколько штрихов, чтобы показать клавиатуру. Это происходит, только когда вы нажимаете туда, где находится текст заполнителя. Вот снимок иерархии представлений, который мне кажется подходящим.Иногда мой UITextField не реагирует на касание, почему?

View Hierarchy

Button Position

Любые идеи, что еще искать, так что я могу понять, почему это происходит?


EDIT

Так я понял, что проблема в том, что это в следующей части коде leftView:

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

Это, кажется, чтобы предотвратить штрихами примерно первые три символов «Пароль». Причина в том, что это было, чтобы проложить левую сторону поля, чтобы слово не было справа от левого края. Какие альтернативы мне нужно либо разрешить обнаружение касаний, либо поместить поле по-другому?

+0

что-нибудь над этим? ярлык или что-то ..? –

+0

Нет ничего в этом – conorgriffin

+0

Вы добавили распознавателей жестов? type "po [[UIWindow keyWindow] recursiveDescription]" в отладчике и проверить иерархию представления –

ответ

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

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 к прикосновениям

Смежные вопросы