删除文本字段时出现问题

时间:2013-11-25 13:05:25

标签: ios objective-c uitextfield

我有两个用于添加和删除文本字段的按钮。添加工作正常,但当我点击删除它只删除最后添加的文本字段。以下是我的两种方法:

-(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;
}

我知道这是一个小问题,但我对这个领域很陌生,所以请帮助。

4 个答案:

答案 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)

我认为问题出在问题上。你能检查以下内容:

  1. 打开连接到IB中的textifeld的插座。编辑器左侧的圆圈内应该有灰点。它们对于两个文本字段看起来都是正确的吗?

  2. deleteTextField方法中设置断点并检查两个文本字段。验证两个属性都不是nil。

  3. 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];
    }
}
}