【问题标题】:Getting the Value of a UITextField as keystrokes are entered?在输入击键时获取 UITextField 的值?
【发布时间】:2010-09-28 03:26:57
【问题描述】:

假设我有以下代码:

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

我希望greetingLabel 在用户按下任意键后立即读取“Hello [nameTextField]”。

我需要的基本上是 Cocoa 委托方法 controlTextDidChange 的 iPhone 等效项。

每次击键时都会调用textField:shouldChangeCharactersInRange:委托方法:

- (BOOL)              textField:(UITextField *)textField
  shouldChangeCharactersInRange:(NSRange)range     
              replacementString:(NSString *)string

字符串参数返回被按下的字符。但是,textField 的实际值 (nameTextField.text) 仍然为空。

我在这里缺少什么? (我希望nameTextField 反映用户目前输入的确切字符串)。

【问题讨论】:

    标签: ios objective-c cocoa-touch uitextfield


    【解决方案1】:

    事实证明,最简单的方法是使用 Interface Builder:

    • 添加一个 IBAction(例如,在本例中添加到 ViewController)
    • 在 Interface Builder 中的 UITextField 上按住 Ctrl 并单击(或右键单击)
    • 将“Editing Changed”事件连接到第一步添加的文件所有者的 IBAction。

    像魅力一样工作:)(我不敢相信我在这上面花了很多天,现在才意识到解决方案比我想象的要简单得多:P)

    【讨论】:

    • 谢谢!我一直在使用“Value Changed”,就像您使用 UISlider 等一样。有趣的是,他们有两个似乎具有相同行为的事件。
    • 出于某种原因,我仍然想要一种编程方式来做到这一点......但我放弃了......这个方法太棒了!谢谢你的分享……我以前看过,但经过几天的编码,我的大脑不再运作了,呵呵。
    • @AlbertRenshaw 但是您可以通过编程方式执行此操作 ;) 只需执行 [textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged] ;)。
    【解决方案2】:

    您可以在文本字段上为事件 UIControlEventEditingChanges 注册一个操作:

    [nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];
    

    ...

    // TODO: error checking
    
    - (void)updateLabelUsingContentsOfTextField:(id)sender {
    
        greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text];
    
    }
    

    【讨论】:

    • 有没有办法使用 Interface Builder 指定这个?
    【解决方案3】:

    UITextField 有一个通知UITextFieldTextDidChange,如果您注册它,每次文本更改时都会触发该通知。只需注册该通知并在通知调用的方法中更改标签的文本。

    此外,传递给您的通知处理程序的对象将具有UITextField 的文本。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多