【问题标题】:How to delete UITextfield and entered data from it in iOS如何在 iOS 中删除 UITextfield 并从中输入数据
【发布时间】:2015-11-10 23:07:31
【问题描述】:

我开发了一个应用程序,其中我有两个名为 [+] 和 [-] 的 UIButton 和一个 UITextField 默认值。

现在我想要的是,当我单击加号 [+] 按钮时,它应该在 UIView 中添加一个 UITextField,这对我来说非常有用,但是当我单击减号时 [-]按钮,它应该删除最后创建的 UITextField,它现在对我不起作用。

如何管理?

这是我加号[+]按钮的代码。

- (IBAction)btnPlusClicked:(id)sender { scrollViewSpecialitiesTxtFields.hidden = FALSE; 浮动y; y = (35 * txtSpecialityFieldCounter); UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, y, 120, 30)]; textField.delegate = self; textField.borderStyle = UITextBorderStyleRoundedRect; [arraySpecialitiesTxtFields insertObject:textField atIndex:arraySpecialitiesTxtFields.count]; scrollViewSpecialitiesTxtFields.contentSize = CGSizeMake(125, y+30); [scrollViewSpecialitiesTxtFields addSubview:textField]; txtSpecialityFieldCounter++; NSLog(@"txtSpecialityFieldCounter : %d",txtSpecialityFieldCounter); }

这是我的减号 [-] 按钮代码

-(IBAction)btnMinusClicked:(id)sender
{
    [scrollViewSpecialitiesTxtFields.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

    txtSpecialityFieldCounter--;
    NSLog(@"txtSpecialityFieldCounter : %d",txtSpecialityFieldCounter);

    float y;

    y = (35 * txtSpecialityFieldCounter);

    for(int i = 0 ; i < txtSpecialityFieldCounter; i++)
    {
        UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, y, 120, 30)];
        textField.delegate = self;
        textField.borderStyle = UITextBorderStyleRoundedRect;

        [arraySpecialitiesTxtFields insertObject:textField atIndex:arraySpecialitiesTxtFields.count];

        scrollViewSpecialitiesTxtFields.contentSize = CGSizeMake(125, y-30);
        [scrollViewSpecialitiesTxtFields addSubview:textField];
    }
}

我知道减号 [-] 按钮代码有误,但请告诉我更改

【问题讨论】:

  • 显示您的删除 IBAction
  • 另外,您的文本字段仅适用于该 IBAction 方法,并且当您再次单击加号按钮时不会保留,这是您想要的吗?
  • 对此感到抱歉。等一下,我更新了我的整个代码,也让你知道我真正想要什么。
  • 没问题,我想你下面可能已经有了答案
  • Tejas,我应该添加多少个文本字段?我应该可以添加多少我想添加的?

标签: ios objective-c uitextfield


【解决方案1】:

NSMutableArray *myAddedTextfieldsviewDidLoad-&gt; myAddedTextFields = [NSMutableArray array]; 中创建一个全局变量

- (IBAction)plusAction:(id)sender 
{
UITextField *textField1 = [[UITextField alloc]initWithFrame:CGRectMake(50, 50, 100, 20)];

textField1.text = @"hey how r u";

textField1.backgroundColor = [UIColor grayColor];

textField1.tag = 1;
[self.view addSubview:textField1];
[myAddedTextFields addObject:textField1];
}

- (IBAction)minusAction:(id)sender 
{
UITextField *txtField = [myAddedTextFields objectAtIndex:myAddedTextFields.count -1]; //for deleting from the last textfield onwards.

[txtField removeFromSuperView];
[myAddedTextFields removeObjectIdenticalTo:txtField];

}

我已经编辑了你的方法..希望这会有所帮助。

【讨论】:

  • 谢谢兄弟。这是有效的,但它仍然是删除我的第一个 UITextField 然后下一个并继续。
  • 你要删除哪一个?
  • 等等,我给你举个例子。当您在手机中添加某人的联系人号码时,如果您想再添加一个号码,则必须单击加号按钮,如果不想添加另一个联系人,则必须单击 [-] 按钮,它会删除额外创建的数字字段。我想在我的应用中实现相同的功能。
  • 我会让 Saheb 继续回答这个问题,但是你可以从一个像 87982 这样的全局计数器开始,只是一个随机整数,当添加一个文本字段时,然后添加这个计数器 + 1 作为标签
  • 然后,将数字也存储为静态变量,在 + 末尾和减号开始时减去计数器,然后开始从正确的顺序中删除标签。我说使用随机数,这样就不会与使用 taggin 系统的其他进程发生冲突
【解决方案2】:

每当您想在超级视图上添加UITextField 时,请设置该组件的标签 (UITextField)。

当你想从超级视图中删除它时,然后使用标签获取该组件的引用 (UITextField) 并将其从超级视图中删除。

下面是一个可能对你有帮助的例子:

-(IBAction)plusAction:(id)sender 
{
    UITextField *textField1 = [[UITextField alloc]initWithFrame:CGRectMake(50, 50, 100, 20)];

    textField1.text = @"hey how r u";

    textField1.backgroundColor = [UIColor grayColor];

    textField1.tag = 1;
    [self.view addSubview:textField1];
}

-(IBAction)minusAction:(id)sender 
{
    UITextField * textfield = (UITextField *)[self.view viewWithTag:1];
    [textfield removeFromSuperview];
}

【讨论】:

  • 我也试过这个。这也适用于我。谢谢。
  • 我不是回答问题的人 :) 我修复了一封信 :)
  • 请为正确的答案投票,以感谢回答的人:)
  • hasan83 。我知道 。感谢 kavita 回答我的问题,也感谢你的修改:):)
【解决方案3】:

是的,您可以使用标签选项。或者您可以使用NSArray 来保存您的UITextFields

@interface MyTextFieldViewClass ()

@property (nonatomic, retain) NSMutableArray *textFields;

@end

@implementation MyTextFieldViewClass

- (void)viewDidLoad {
    [super viewDidLoad];

    self.textFields = [NSMutableArray array];
}

- (IBAction)addTextField:(id)sender {
    UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(50, 50, 100, 20)];

    [self.textFields addObject:tf];
    [self.view addSubview:tf];
}

- (IBAction)removeTextField:(id)sender {
    UITextField *tf = [self.textFields lastObject];
    [tf removeFromSuperview];

    [self.textFields removeLastObject];
}

@end

这会更好一些,因为您不必遍历 self.view.subviews 中存在的所有视图/ID。此外,使用tag 可能不可靠,因为您总是想删除最后一项,因此您需要将最后一项编号保留在内存中,或者您需要遍历所有子视图才能找到@987654325 @ 带有最高标签并删除它。

【讨论】:

  • 这是您给我的非常简单的解决方案。谢谢@Paul Peelen .. 也为我工作
  • 当然可以。很高兴我能帮助你。不过请记住,我没有测试我的代码..它直接写在这里。
  • 很好,我这边做了一些修改,但这对我有用。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 2021-07-10
相关资源
最近更新 更多