有时我的UITextField对触摸没有反应,为什么?

时间:2013-03-02 16:42:47

标签: ios uiview 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;

这似乎可以防止接触“密码”的前三个字符。它的原因是填充场的左侧,所以单词没有正对着左边缘。我还有哪些替代方法可以检测触摸或以不同的方式填充场?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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;

这会填充细胞,但不会阻止触摸检测

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

致电

  

[self resignFirstResponder]

在我的带有UITextField的ViewController中的

有助于解决定期的无响应接触