【问题标题】:How does the methods "shouldChangeTextInRange" and "stringByReplacingCharactersInRange" work?“shouldChangeTextInRange”和“stringByReplacingCharactersInRange”方法是如何工作的?
【发布时间】:2011-09-26 11:24:58
【问题描述】:

我想知道以下代码的工作原理。

- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    return !([newString length] > 10);
}

“stringByReplacingCharactersInRange”有什么作用?以及上面的方法是如何限制textField可以输入的字符数的?

提前致谢!

【问题讨论】:

    标签: objective-c ios nsstring textfield


    【解决方案1】:

    textField:shouldChangeCharactersInRange:replacementString:UITextFieldDelegate 方法,在文本字段的内容即将更改(在文本字段中输入、删除、剪切或粘贴文本)时调用,询问代理是否允许此更改。

    stringByReplacingCharactersInRange:withString: 是一个 NSString 实例方法,它完全按照它所说的那样做,用另一个字符串替换当前字符串中的一些文本,创建一个新字符串。

    您的代码检查作为此更改结果的字符串是否超过 10 个字符,如果是,则委托将返回 NO 并且文本字段内容不会更改。如果结果字符串为 10 个字符或更少,则委托将返回 YES,并且文本字段的内容将更改为您在 newString 中获得的相同字符串。

    【讨论】:

    • 谢谢!但是上面代码中“范围”的值是多少?
    • 一个NSRange 结构,包含起始字符的索引和将被替换的字符串部分的长度。如果用户正在输入文本,range.location 将为最后一个字符的索引 + 1,range.length 将为 1。如果用户正在删除选定的文本,range.location 将是第一个选定字符的索引,range.length 将为选择的字符数。
    • 好吧..假设如果textField为空,并且用户正在输入文本,那么“范围”将具有用户输入的字符长度?
    • shouldChangeTextInRange:replacementString: 不是UITextFieldDelegate 方法,它是UITextInput 协议可选方法。 textField:shouldChangeCharactersInRange:replacementStringUITextFieldDelegate 方法。更新了答案以反映这一点。
    • @Answerbot 是的,复制/粘贴时错过了选择器的第一部分,感谢您发现它。
    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 2013-03-11
    • 2019-05-20
    • 2012-04-21
    • 2016-07-26
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多