我有一个标准的UITextField,我已添加到UITableViewCell,每当我去编辑它时,其中的文本都不会清除。我尝试过放置占位符,编辑时也不会清楚。发生了什么事?
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;
}
答案 0 :(得分:4)
每当调用cellForRowAtIndexPath
时,您都会将相同文本字段的多个实例添加到单元格中。在viewDidLoad
中创建文本字段并添加到此单元格。它应该工作。
另一种方法是将UITableViewCell
子类化,并将此textFiled添加为其init
方法中的属性。然后,您可以将值设置为cell.textField.text = @"some value";
如果您在cellForRowAtIndexPath
,
deviceID = [[UITextField alloc] initWithFrame:CGRectMake(115, 11, 388, 22)];
每当表视图重新加载时都会调用它,您将丢失以前文本字段的引用。因此,您需要确保只创建一个文本字段并将其添加到tableview单元格。这也将确保您在单元格中只创建一个文本字段。
答案 1 :(得分:1)
如果您尝试此委托方法该怎么办:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[textField setText:@""];
}
答案 2 :(得分:0)
我在另一篇文章中发现了以下内容(通常与视图相关):
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
并转换为:
[cell.contentView.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
完美地解决了这个问题。
答案 3 :(得分:0)
您可以使用此
[deviceID removeFromSuperview];
devideID = nil;
deviceID = [[UITextField alloc] initWithFrame:CGRectMake(115, 11, 388, 22)];
...
虽然接受的答案有效,但如果您不想将责任委托给必须创建UITextField的ViewController,请使用此