当前位置: 首页 > 面试题库 >

Swift中的ChangeCharactersInRange应该如何工作?

田嘉澍
2023-03-14
问题内容

我正在使用 shouldChangeCharactersInRange 作为使用即时类型搜索的方式。

但是我有一个问题,在文本字段实际更新之前 应该 调用 shouldChangeCharactersInRange

在目标C中,我使用以下方法解决了这个问题:

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

    return YES;
}

但是,我尝试用Swift编写此代码:

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
    let txtAfterUpdate:NSString = self.projectSearchTxtFld.text as NSString
    txtAfterUpdate.stringByReplacingCharactersInRange(range, withString: string)

    self.callMyMethod(txtAfterUpdate)
    return true
}

在获得值之前,该方法仍会被调用?


问题答案:

雨燕4,雨燕5

此方法不使用 NSString

// MARK: - UITextFieldDelegate

extension MyViewController: UITextFieldDelegate {
    func textField(_ textField: UITextField,
                   shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {
        if let text = textField.text,
           let textRange = Range(range, in: text) {
           let updatedText = text.replacingCharacters(in: textRange,
                                                       with: string)
           myvalidator(text: updatedText)
        }
        return true
    }
}

注意。使用安全的文本字段时请小心。



 类似资料:
  • 问题内容: 在Objective- C中,我调用该方法来记录异常。如何在Swift中调用它? 问题答案: 使用Swift 2,您可以将Swift函数和闭包作为C函数指针传递 原始答案 从Xcode 6 beta 6开始,您不能这样做。 Swift确实支持传递函数指针,但是它们几乎就像不透明指针一样被对待。您既不能定义指向Swift函数的C函数指针,也不能在Swift中调用C函数指针。 这意味着您从

  • 问题内容: 输出如下: 我原以为takes2Second函数会在takes5Second开始之前完全完成。那是应该如何工作的。请告诉我。最后的功能永远不会运行。谢谢。 问题答案: 不完全的。您正在立即执行这些功能(对数组求值后立即执行),这就是它们似乎同时启动的原因。 传递给要执行的每个函数的回调在异步库内部。您可以在函数完成后执行它,并传递错误和/或值来执行它。您无需自己定义该功能。 最终函数永

  • 在底部将此选项设置为true vs false时,它们将列出结果的差异 在我的EMR配置(在presto-config中)中包含设置为之后,我仍然会根据这个测试查询获得新的结果(并且我的UTC时间戳仍然会自动转换)。 对于启用遗留时间戳行为还需要做些什么有什么建议吗?

  • 问题内容: 我在尝试使用timestamp2代替SQL Server 2008中的Timestamp时遇到了一些麻烦。显然,rs.getTimestamp在timestamp和timestamp2之间的行为非常不同。但是,我找不到任何文档说明应该有所不同,或者我应该使用其他有所不同的文档。我想知道我是否做错了什么。 环境: 在SQL Express 2008(10.0)和SQL Server 20

  • 问题内容: 鉴于以下HTML和CSS,我在浏览器中看不到任何东西(撰写本文时,Chrome和IE最新)。一切都崩溃为0x0像素。为什么? 问题答案: CSS表模型基于HTML表模型 一个表分为ROWS,并且每一行包含一个或多个单元格。单元格是ROWS的子级,它们是列的子级。 “ display:table-column”不提供用于制作列式布局的机制(例如,具有多列的报纸页面,其中内容可以从一列流向

  • 问题内容: 我一直在挣扎着我的第一个正则表达式。在编译,并不断得到错误。 我只是更改为,它的工作就像一个梦。 我的印象是,荷兰国际集团将 同时 在带来等等那是不是这样的?我找不到解决此特定问题的任何文档。 问题答案: 是的,这就是Java中包导入的工作方式(应该如此)。例如,doing 将导入所有 类 ,但 不 导入子包及其类。 人机工程学,将 不会 导入或 阅读以下博客,获得一些友好的新手建议。