首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用` `textField:shouldChangeCharactersInRange:`,如何获取包含当前键入字符的文本?

使用` `textField:shouldChangeCharactersInRange:`,如何获取包含当前键入字符的文本?
EN

Stack Overflow用户
提问于 2010-02-04 15:44:35
回答 10查看 94.4K关注 0票数 118

我正在使用下面的代码来尝试让textField2的文本内容在用户输入textField1时更新为与textField1的文本内容相匹配。

代码语言:javascript
复制
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {    
  if (theTextField == textField1){    
     [textField2 setText:[textField1 text]];    
  }
}

然而,我观察到的输出是...

textField2为"12",textField1为"123“

当textField1为"1234“时,textField2为"123”

..。当我想要的是:

textField2为"123",textField1为"123“

当textField1为"1234“时,textField2为"1234”

我做错了什么?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-02-04 16:21:04

在文本字段实际更改其文本之前,-shouldChangeCharactersInRange被调用为,这就是为什么您将获得旧的文本值。要在更新后获取文本,请使用以下命令:

代码语言:javascript
复制
[textField2 setText:[textField1.text stringByReplacingCharactersInRange:range withString:string]];
票数 272
EN

Stack Overflow用户

发布于 2013-04-01 20:58:36

代码语言:javascript
复制
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSLog(@"%@",searchStr);
    return YES;
}
票数 52
EN

Stack Overflow用户

发布于 2016-11-01 22:59:23

Swift 3

根据接受的答案,以下内容应适用于Swift 3

代码语言:javascript
复制
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)

    return true
}

备注

StringNSString都有名为replacingCharacters:inRange:withString的方法。但是,不出所料,前者需要一个Range实例,而后者需要一个NSRange实例。textField委托方法使用NSRange实例,因此在本例中使用NSString

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2198067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档