我有两个用于添加和删除文本字段的按钮。添加工作正常,但当我点击删除它只删除最后添加的文本字段。以下是我的两种方法:
-(void)addTextField {
keyTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, yAxisDistance, 150, 30)];
keyTextField.borderStyle = UITextBorderStyleRoundedRect;
keyTextField.placeholder = @"Key Value";
keyTextField.delegate = self;
[self.view addSubview:keyTextField];
valueTextField = [[UITextField alloc] initWithFrame:CGRectMake(165, yAxisDistance, 150, 30)];
valueTextField.borderStyle = UITextBorderStyleRoundedRect;
valueTextField.placeholder = @"Value";
valueTextField.delegate = self;
[self.view addSubview:valueTextField];
yAxisDistance = yAxisDistance+35;
}
-(void)deleteTextField {
[keyTextField removeFromSuperview];
[valueTextField removeFromSuperview];
yAxisDistance = yAxisDistance-35;
}
我知道这是一个小问题,但我对这个领域很陌生,所以请帮助。
答案 0 :(得分:1)
使用此代码从UIView中删除特定的文本字段。但首先,您必须在视图中创建或添加每个UITextField时设置其标记。
for ( UITextField* textField in view.subviews )
{
if(textField.tag== 1)
{
[textField removeFromSuperview];
}
}
答案 1 :(得分:1)
很抱歉,我不明白你的问题......
我完成了这个: 声明一个
NSMutableArray * allTextfieldArray;
并在
中初始化viewDidLoad中
方法.. 现在做:
-(void)addTextField {
keyTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, yAxisDistance, 150, 30)];
keyTextField.borderStyle = UITextBorderStyleRoundedRect;
keyTextField.placeholder = @"Key Value";
keyTextField.delegate = self;
[self.view addSubview:keyTextField];
valueTextField = [[UITextField alloc] initWithFrame:CGRectMake(165, yAxisDistance, 150, 30)];
valueTextField.borderStyle = UITextBorderStyleRoundedRect;
valueTextField.placeholder = @"Value";
valueTextField.delegate = self;
[self.view addSubview:valueTextField];
yAxisDistance = yAxisDistance+35;
[allTextfieldArray addObject:keyTextField];
[allTextfieldArray addObject:valueTextField];
}
if ([allTextfieldArray count]>0) {
UITextField *txtField = [allTextfieldArray lastObject];
[allTextfieldArray removeLastObject];
[txtField removeFromSuperview];
txtField = nil;
UITextField *txtField2 = [allTextfieldArray lastObject];
[allTextfieldArray removeLastObject];
[txtField2 removeFromSuperview];
txtField2 = nil;
yAxisDistance = yAxisDistance-35;
}
答案 2 :(得分:1)
我认为问题出在问题上。你能检查以下内容:
打开连接到IB中的textifeld的插座。编辑器左侧的圆圈内应该有灰点。它们对于两个文本字段看起来都是正确的吗?
在deleteTextField
方法中设置断点并检查两个文本字段。验证两个属性都不是nil。
PS:您不需要在视图中添加标签,在我看来,使用属性非常好,甚至更好。你的问题的原因是别的。此外,您不需要removeFromSuperview
,也可以setHidden:YES.
答案 3 :(得分:0)
将最后一个textField存储在变量keyTextField和valueTextField中。因此,当您调用deleteTextField时,最后两个都将被删除。您必须跟踪要删除的文本文件。
例如,您可以在创建时为所有textFields提供标记号: 首先创建一个int作为计数器:
@implementation YourClass {
int tagcounter;
}
在init方法中设置你的计数器:
tagcounter = 0;
你的addTextField中的:
keyTextField.tag = tagcounter++;
valueTextField.tag = tagcounter++;
点击删除按钮时,您必须知道文本字段标记并将它们传递给deleteTextField方法。你可以在那里做点什么:
-(void)deleteTextFieldWithTag:(int)tagnumber {
for (UIView *view in [self.view subviews])
{
if ([view isKindOfClass:[UITextField class]])
{
if (view.tag == tagnumber || view.tag == tagnumber+1) {
[view removeFromSuperview];
}
}
}