代码之家  ›  专栏  ›  技术社区  ›  Debajit

在输入击键时获取uitextfield的值?

  •  106
  • Debajit  · 技术社区  · 16 年前

    假设我有以下代码:

    IBOutlet UITextField* nameTextField;
    IBOutlet UILabel* greetingLabel;
    

    我想要 greetingLabel 要在用户按下任何键后立即阅读“hello[nametextfield]”。

    我需要的基本上是iPhone相当于Cocoa委托方法 controlTextDidChange .

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

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

    字符串参数返回按下的字符。实际 textField 的价值 nameTextField.text )但仍为空白。

    我这里缺什么?(我喜欢 nameTextField 以反映用户迄今为止输入的确切字符串)。

    3 回复  |  直到 9 年前
        1
  •  194
  •   Debajit    16 年前

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

    • 添加一个IBaction(例如,在本例中,添加到ViewController)
    • 在Interface Builder的uitextfield上单击(或右键单击)
    • 将“编辑已更改”事件连接到第一步中添加的文件所有者的IBaction。

    就像一个魔咒一样工作:(我不敢相信我花了很多天在这个问题上,现在我意识到解决方案比我想象的要简单得多:p)

        2
  •  101
  •   axa    16 年前

    您可以在文本字段上为事件uicontrol事件编辑更改注册操作:

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

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

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

    若要添加到此内容,传递给通知处理程序的对象将具有 输入框 .

    希望有帮助。