3

いくつかのセルがあるがあり、各UITableViewセルにを追加しUITextFieldます。

設定しtextField.clearButtonMode = UITextFieldViewModeWhileEditingました。

textFieldを編集していると、クリアボタンとキーボードの両方が出てきます。textFieldにいくつかの単語を入力し、クリアボタンをタップすると、キーボードは非表示になりますが、textFieldのテキストはクリアされません。

クリアボタンを除いて、他のすべてはうまく機能します。

4

4 に答える 4

9

この問題が発生したのは、テーブルのタップをキャッチしてキーボードを閉じるのを忘れていてUITapGestureRecognizer、クリアボタンのタップをキャプチャして機能しなくなっていたためです。を追加cancelsTouchesInView=NOUITapGestureRecognizerてタッチを有効CGRectContainsPointにし、タッパーメソッドを使用してチェックし、編集を終了resignFirstResponderし、タップが現在UITextFieldのフレーム長方形にない場合にのみチェックします。オートコレクトでXをタップすると、テキストフィールドのフレーム長方形の外側にある可能性があるため、これはまだ完全ではないことに注意してください。したがって、セルをチェックするcontentView方がよい場合があります。

于 2012-08-27T21:18:58.563 に答える
3

ジェスチャ認識機能を使用している場合は、このようにする必要があります

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(methodThatYouMayCall)];
[myTextField addGestureRecognizer:gestureRecognizer];
gestureRecognizer.delegate =  self;
gestureRecognizer.cancelsTouchesInView = NO;

これにより、テキストフィールドがクリアされ、クリアボタンをクリックすると「methodThatYouMayCall」が起動​​されるため、これも実行する必要があります。textField.clearButtonModeは一種のUIButtonクラスであるため、この方法で実行できます。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{   
   if ([touch.view isKindOfClass:[UIButton class]]) 
   {
       return NO;
   }
   else
   {
       return YES;
   }
}

クラスをUIGestureRecognizerDelegateプロトコルを実装するものとしてマークすることを忘れないでください。これがお役に立てば幸いです。

于 2013-11-28T06:21:54.373 に答える
1

[クリア]ボタンをタッチしてもファーストレスポンダーを辞任しないため、問題を再現できませんでした。しかし、おそらく、コードを以下に含めた最も基本的なユースケースと比較して、何が悪かったのかを見つけることができます。

さらに、UIResponderに関するドキュメントを読むことをお勧めします。これは、この領域で誤って手を出している可能性があるためです。

@implementation TextFieldTableViewController

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

    // Remove old instances of myTextField
    for (UIView *oldView in cell.contentView.subviews)
        [oldView removeFromSuperview];

    // Create my new text field
    UITextField *myTextField = [[UITextField alloc] initWithFrame:cell.contentView.bounds];
    [myTextField setClearButtonMode:UITextFieldViewModeWhileEditing];
    [myTextField setBorderStyle:UITextBorderStyleRoundedRect];

    // Add the TextField to the content view
    [cell.contentView addSubview:myTextField];

    return cell;
}

@end
于 2012-08-12T18:59:58.623 に答える
0

元の問題はこれが原因ではありませんでしたが、ここにつながる今後の検索では、次のことを知る必要があると思います。

に追加するビューは、そのプロパティにサブビューとして追加するUITableViewCell 必要contentViewがあります。そうしないと、ユーザー操作が有効になっていない状態でビューが表示される場合があります。

contentViewiOS 2.0以降、にサブビューを追加することになっています。

于 2021-04-13T10:14:00.030 に答える