1

UITableViewCell に追加した標準の UITextField があり、それを編集しようとすると、その中のテキストがクリアされません。プレースホルダーを配置しようとしましたが、編集時にそれもクリアされません。どうしたの?

if (indexPath.row == 1) {
        cell.textLabel.text = @"Device ID";
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        deviceID = [[UITextField alloc] initWithFrame:CGRectMake(115, 11, 388, 22)];
        deviceID.delegate = self;
        deviceID.adjustsFontSizeToFitWidth = YES;
        deviceID.font = [UIFont boldSystemFontOfSize:15];
        deviceID.textColor = [UIColor blackColor];
        deviceID.autocorrectionType = UITextAutocorrectionTypeNo;
        deviceID.autocapitalizationType = UITextAutocapitalizationTypeNone;
        deviceID.textAlignment = NSTextAlignmentLeft;
        deviceID.clearButtonMode = UITextFieldViewModeWhileEditing;
        deviceID.keyboardType = UIKeyboardTypeDefault;
        deviceID.backgroundColor = [UIColor clearColor];
        deviceID.delegate = self;
        deviceID.clearsOnBeginEditing = YES;
        deviceID.text = [[NSUserDefaults standardUserDefaults] objectForKey:DEVICE_ID];
        [deviceID setEnabled:YES];
        [cell addSubview:deviceID];
    }

- (BOOL)textFieldShouldClear:(UITextField *)textField {

    return YES;
}
4

4 に答える 4

4

cellForRowAtIndexPathが呼び出されるたびに、同じテキストフィールドの複数のインスタンスをセルに追加しています。テキストフィールドを作成viewDidLoadし、このセルに追加します。それはうまくいくはずです。

別の方法は、あなたをサブクラス化UITableViewCellし、この textFiled をそのinitメソッドのプロパティとして追加することです。次に、値を次のように設定できますcell.textField.text = @"some value";

この行を に追加するとcellForRowAtIndexPath

deviceID = [[UITextField alloc] initWithFrame:CGRectMake(115, 11, 388, 22)];

テーブルビューがリロードされるたびに呼び出され、以前のテキストフィールドの参照が失われます。そのため、テキストフィールドを 1 つだけ作成し、それをテーブルビュー セルに追加していることを確認する必要があります。これにより、セル内にテキストフィールドが 1 つだけ作成されるようになります。

于 2013-01-05T20:16:05.623 に答える
1

このデリゲート メソッドを試してみるとどうなりますか。

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
   [textField setText:@""];
}
于 2013-01-05T20:11:27.910 に答える
0

別の投稿で次のことを見つけました(一般的にビューに関連する):

[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];

そしてこれに変換:

[cell.contentView.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];

このスレッドの問題を解決するために完全に機能します。

于 2013-01-29T06:18:01.910 に答える