【问题标题】:Calling a method only after shouldChangeCharactersInRange returns yes仅在 shouldChangeCharactersInRange 返回 yes 后调用方法
【发布时间】:2013-03-07 09:16:03
【问题描述】:

我有一个 UITextField,其下方有一个表格,其中显示了可供选择的项目列表(类似于下拉列表)。现在,例如,当我在文本字段中键入 2(文本字段具有年份值)时,该表将显示所有带有 2 的字符串作为子字符串。所以当我输入 2000 时,它只会在表格中显示匹配的字符串 2000。

现在,当我在文本字段中输入完 2000 后,我想调用一个方法。一切正常,但我只想在我输入完所有 4 位数字后才调用此方法,但这里在我尝试输入第 4 位数字时调用此方法。

我如何在输入 2000 时执行此操作,并且在输入第三个零后,它会在 shouldChangeCharactersInRange 返回 Yes 后调用该方法。

这是我的代码:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *substring = [NSString stringWithString:textField.text];
    substring = [substring stringByReplacingCharactersInRange:range withString:string];

    //if _filteredarray count==1 and substring and _filteredarray object at index 0 matches then call a method here

     return YES;
}

【问题讨论】:

  • 您可以使用 UISearchBar 进行搜索并实现它的方法。这对你来说很容易。
  • 你可以计算 string.length 如果它是

标签: iphone ios objective-c uitextfield


【解决方案1】:

试试这个

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
     NSString *substring = [NSString stringWithString:textField.text];
     substring = [substring stringByReplacingCharactersInRange:range withString:string];
     if(substring.length == 4)
     {
          [textField resignFirstresponder];
          [self performSelector:@selector(functiontocall)withObject:nil afterDelay:0.8];
     }
     return YES;
}

上面的代码可能会给你一个想法

如果你输入2000的第四个字母,那么键盘会消失(如果你想你可以添加它,这样可以避免在文本字段中进一步输入值),然后你可以看到第三个零0.8秒和你需要的功能to call 将被调用。

【讨论】:

  • 我目前只这样做,但我只想在输入第 4 位并且 shouldChangeCharactersInRange 返回 YES 后调用方法。这里方法在第 4 位被接受之前被调用
  • 我的意思是当我输入第四位数字 0 时,长度将为 4,因此将在 shouldChangeCharactersInRange 返回 YES 之前调用方法。虽然设置了延迟,但由于我的方法包含将表中匹配的字符串转换为不同颜色的代码,因此它不受影响,因为 shouldChangeCharactersInRange 尚未返回 YES..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2011-10-29
  • 2022-01-24
  • 2016-12-10
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多