【问题标题】:How to get text from textfield tag in iPhone如何从 iPhone 中的 textfield 标签中获取文本
【发布时间】:2014-07-11 06:00:51
【问题描述】:

我正在动态创建文本字段,并且每个文本字段都有标签。现在,我正在尝试使用该标签获取文本字段的文本,但是它返回 UIButton 并且我的应用程序崩溃了。如何从标签中获取文本?请帮我。 这是我获取文本的代码:

UITextField *textValue = (UITextField *)[self.view viewWithTag:textField.tag];
NSString *chkText = textValue.text;

NSLog(@"entered Text %@",chkText);

我的应用程序在这一行崩溃了:

NSString *chkText = textValue.text;

并且错误是: -[UIButton text]: 无法识别的选择器发送到实例

【问题讨论】:

  • 可能是您的 textField 标签与 uibutton 冲突。
  • 你在文本字段中分配了相同的标签并取消按钮
  • 您必须检查分配的标签并确保标签对于 UI 元素是唯一的。
  • 请检查您的 UIButton 和 UITextField 标签是否相同,因为它通过此错误,将您的 textFiled 标签更改为其他,然后检查。
  • 为什么你要使用 textField.tag 值,如果你有 textField 参考,你可以直接使用它。使用标签值获取 textField 的 ref,该标签值是从 textField ref 中获取的。为什么??

标签: ios iphone objective-c uitextfield


【解决方案1】:

主要问题是您的视图也包含按钮。因此,当您尝试访问它时。它正在返回 UIButton 对象。所以最好检查条件是按钮类型还是文本字段类型对象。试试下面:-

id nextTextField = [self.view viewWithTag:textField.tag];
nextTextField=([nextTextField isKindOfClass:[UITextField class]]) ? nextTextField.text : nextTextField.title;
NSLog(@"%@", nextTextField);

【讨论】:

    【解决方案2】:

    通过您的代码 (viewWithTag:textField.tag),如果您可以访问您的 textField,那么您为什么还要再次访问它?但是,下面的描述会对您有所帮助

    您已将相同的标记分配给同一视图中的一个 UIButton 控件。还要确保textField.tag大于零

    以下代码将修复崩溃,但是,它不会解决您的问题。

    UITextField *textFeild = [[self.view viewWithTag:textFieldTag] isKindOfClass:[UITextField class]]?(UITextField *)[self.view viewWithTag:textFieldTag]:nil;
    
    if(nil != textFeild)
    {
       NSString *chkText = textFeild.text;
       NSLog(@"entered Text %@",chkText);
    }
    else
    {
      NSLog(@"textFeild is null");
    }
    

    【讨论】:

      【解决方案3】:

      将文本字段标记设置为任何唯一值,例如“346”。 (避免使用 0 作为标签值)。并使用这个 --

      UITextField *textValue = nil; 
      id myObj = [self.view viewWithTag:yourTagValue];
      if([myObj isKindOfClass:[UITextField class]])
      {
         textValue = (UITextField*)myObj; 
         NSString *chkText = textValue.text;
         NSLog(@"entered Text %@",chkText);
      }
      

      【讨论】:

        【解决方案4】:

        在使用标签时,使用 NS_ENUM 是一个好习惯。

        NS_ENUM(NSUInteger, TEST_TAGS)
        {
            TAG_TEXT_INPUT,
            TAG_BTN_GO,
        };
        

        那你就可以用了。

        [textField setTag:TAG_TEXT_INPUT];
        

        【讨论】:

        • 并且由于枚举中的第一个值是 0 [view viewWithTag: TAG_TEXT_INPUT] 将返回第一个没有标签的视图。这不一定是 textField。
        • 确实如此。为避免这种情况,您可以将第一个值设置为 1。Easy?
        【解决方案5】:

        首先检查您将此文本字段作为子视图添加到哪个 UIVIew。

        获取 UIVIew 实例并调用 viewWithTag 方法,然后您的代码就可以工作了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-26
          • 2017-06-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多