2

UITextField(パスワードフィールド)があり、キーボードを表示するために数回タッチすることがあります。これは、プレースホルダーテキストがある場所をタップした場合にのみ発生するようです。これは、私には問題ないように見えるビュー階層のショットです。

階層を表示

ボタンの位置

なぜこれが起こっているのかを理解できるように、他に何を探すべきか考えていますか?


編集

だから私は問題が何であるかを理解しました、それleftViewは次のコードの部分にあります:

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

これにより、「パスワード」の最初の約3文字に触れることができなくなるようです。そこにある理由は、フィールドの左側を埋めて、単語が左マージンに対して正しくないようにするためでした。タッチを検出できるようにするか、別の方法でフィールドをパディングするために、どのような代替手段が必要ですか?

4

4 に答える 4

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 に答える
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

タップイベントを飲み込む左側のビューを停止するには、ビューで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 に答える
0

呼び出し

[自己resignFirstResponder]

UITextFieldを使用したViewControllerで、タッチに対する定期的な無応答を解決するのに役立ちます

于 2014-11-13T12:10:20.007 に答える