2

我有一个UITextField(密码字段),有时需要多次触摸才能显示键盘。这似乎只在您点击占位符文本的位置时才会发生。这是视图层次结构的照片,对我来说似乎没问题。

查看层次结构

按钮位置

任何想法还有什么要寻找的,所以我可以弄清楚为什么会这样?


编辑

所以我弄清楚了问题所在,它leftView在下一段代码中:

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

这似乎可以防止触摸“密码”的前三个字符。它存在的原因是要填充字段的左侧,因此单词不会正好靠在左边距上。我必须允许检测触摸或以不同方式填充字段的替代方法是什么?

4

4 回答 4

1

要停止左视图吞下点击事件,您可以在视图上将 userInteractionEnabled 设置为 NO,例如

UIView *pwPaddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 38)];
pwPaddingView.userInteractionEnabled = NO;
self.passwordField.leftView = pwPaddingView;
self.passwordField.leftViewMode = UITextFieldViewModeAlways;
于 2014-02-13T00:22:16.683 回答
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;

这会填充单元格,但不会阻止触摸检测

于 2013-03-04T22:06:14.917 回答
1

您是否将其设置为不取消视图中的其他触摸?

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
 tap.cancelsTouchesInView = NO; //add this line
 [self.view addGestureRecognizer:tap];
于 2013-03-03T11:58:31.840 回答
0

打电话

[自我辞职FirstResponder]

在我的 ViewController 中使用 UITextField 有助于解决对触摸的周期性无响应

于 2014-11-13T12:10:20.007 回答