2013-01-05 60 views
1

我有一个标准的UITextField,我已经添加到UITableViewCell中,每当我去编辑它时,其中的文本都不会清除。我曾尝试放置一个占位符,并且在编辑时也不会清除。这是怎么回事?iOS 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; 
} 
+0

你已经包含了责任到ViewController你的界面中有'UITextFieldDelegate'协议吗? – sooper

+0

是的,我已经包括它 –

回答

4

您到时cellForRowAtIndexPath被称为小区追加相同的文本框的多个实例。在viewDidLoad中创建文本字段并添加到此单元格。它应该工作。

另一种方法是对UITableViewCell进行子类化,并在其方法init中添加此文本作为属性。然后,如果你在cellForRowAtIndexPath加入这一行,

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

这将调用每当表视图重装,你将失去以前的文本框的引用,你可以设定值cell.textField.text = @"some value";

。所以你需要确保你只创建一个文本字段并将其添加到tableview单元格中。这也将确保您在单元格中只创建单个文本字段。

+1

啊,这就是为什么。谢谢,我没有想到这一点。谢谢。 –

+0

所以我可能应该只是继承一个UITableViewCell? –

+0

@JonErickson,是的,在这种情况下更好。现在检查我的答案。我编辑了这个建议。如果你在tableview单元格的init方法的子类中创建了这个textfield,你可以使用'cell.textField.text = @“some value”;'设置value和'cell.textField.hidden = YES;'将它隐藏在'cellForRowAtIndexPath '方法。 – iDev

1

,如果你尝试这种委托方法是什么:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [textField setText:@""]; 
} 
+0

更简单的解决方案:) – iProgrammed

+1

这是行不通的...... –

+2

看看上面的答案,这是因为每次表重新加载时,它重新添加子视图,创建堆叠的UITextFields彼此。我需要继承UITableViewCell才能实现此目的。 –

0

我发现在另一篇下面(与图,通常情况下):

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

并转换成这样:

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

完美地工作在这个线程来解决问题。

0

您可以使用此

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

虽然接受的答案工作,如果你不想有委托创建的UITextField然后用这个