如果 UITextField 已经创建,不要在 Tap 上重新创建 UITextField

Posted

技术标签:

【中文标题】如果 UITextField 已经创建,不要在 Tap 上重新创建 UITextField【英文标题】:Don't recreate UITextField on Tap if UITextField is already created 【发布时间】:2014-08-08 09:58:17 【问题描述】:

我有一些想法,但是对于第一次创建带有“if 条件”的 UITextField 来说当然不行。 我怎样才能做到这一点? 我可以设置“如果 UITextField 已经存在”这样的条件吗???

这是我的代码:

-(void)tapDetected:(UIGestureRecognizer*)recognizer
    NSLog(@"tap detected.");
    CGPoint point = [recognizer locationInView:self.truckImageView];
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, point.y, 300, 40)];
    [textField becomeFirstResponder];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.font = [UIFont systemFontOfSize:24];
    textField.placeholder = @"enter text";
    textField.autocorrectionType = UITextAutocorrectionTypeNo;
    textField.keyboardType = UIKeyboardTypeDefault;
    textField.returnKeyType = UIReturnKeyDone;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    textField.delegate = self;
    if (textField.text && textField.text.length > 0)
    
    [self.view addSubview:textField];
    //    textField.alpha = 0.5;
    [textField setBackgroundColor:[UIColor clearColor]];
    
    else
    
        NSLog(@"textField is already created.");
    

【问题讨论】:

【参考方案1】:

当然。创建 UITextField 时,您可以分配一个标签:

textField.tag = 1001;

然后在再次创建之前,您可以检查

UITextField *txt = [self.view viewWithTag:1001];
if(txt.tag == 1001)
  return;

【讨论】:

【参考方案2】:

我会在头文件中声明一个 UITextField 如下

@property (strong, nonatomic) UITextField *textField;

然后在您的点击功能中测试 self.textField 是否为空:

if(self.texField == NULL)
    //enter code

记得将代码中的所有textfield 替换为self.textfield

【讨论】:

以上是关于如果 UITextField 已经创建,不要在 Tap 上重新创建 UITextField的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SpriteKit 上创建 UITextField

如何为 iOS 7 创建弹出式 uipicker 和 uitextfield?

如何启用/禁用 UITextField 的 inputAccessoryView 按钮?

jQuery搜索文本页面并更改它,但如果它已经存在则不要

按下按钮后 UIAlert 验证中的 Swift3 UITextField

创建一个固定的 UITextField - Obj C