UITextField valueDidChange-事件

Posted

技术标签:

【中文标题】UITextField valueDidChange-事件【英文标题】:UITextField valueDidChange-Event 【发布时间】:2010-04-04 14:33:51 【问题描述】:

有没有办法捕捉文本字段的“valueDidChange”事件? oO

我有一个带有 UITextField 的 modalView。

当 UITextField 为空时,应禁用 NavigationBar 中的“完成”按钮 当有文本输入时,它应该会被启用。

目前唯一的方法是使用“textFieldShouldReturn”方法来实现。 这行得通,但对可用性来说太糟糕了。

有没有办法在每次输入或删除字母时检查要求?

【问题讨论】:

【参考方案1】:

Implement -textField:shouldChangeCharactersInRange:replacementString:.

【讨论】:

这里的问题是:-textField:shouldChangeCharactersInRange:replacementString: 在插入字符之前被调用。我需要的是在插入字符后调用。如果我知道如何使用 range 和 replacementstring 参数来构造生成的总字符串,我仍然可以使用它 如果有人关心:解决方案是使用 addTarget:selector:controlevent: 捕获控制事件“EditingChanged”: @Infinite:您可能希望将其作为答案并接受自己。【参考方案2】:

如果有人关心:解决方案是使用 addTarget:selector:controlevent: ;) 捕获控制事件“EditingChanged”

【讨论】:

【参考方案3】:

我有一个UITableViewControllerself.editButtonItem,仅当UITextField.text 中包含文本时才启用。这是一种确保用户在他/她用一些东西填充这个UITextField 之前不按“完成”的方法。我认为这正是您正在寻找的。我是这样做的:

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

    // Logs for seeing patterns, if you so please
    NSLog(@"replacementString length = %d",string.length);
    NSLog(@"textField.text = %@",textField.text);
    NSLog(@"range = (%d,%d)\n\n",range.location,range.length);

    if (string.length) 
        self.editButtonItem.enabled = YES;
     else if (!string.length && textField.text.length == range.length) 
        self.editButtonItem.enabled = NO;
    
    return YES;

希望对你有帮助

【讨论】:

以上是关于UITextField valueDidChange-事件的主要内容,如果未能解决你的问题,请参考以下文章

UITextField

在 UITextField 操作中将 UITextField 字符串转换为 Double

如何调整 UITextField 占位符文本以适合 UITextField 宽度?

如果添加了新的 UITextField,如何向下移动许多 UITextField

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

使用未声明类型的 UITextfield