我正在使用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
}

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

推荐答案

Swift 4, Swift 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
    }
}

笔记使用安全文本字段时要小心.

Ios相关问答推荐

使用CGAffineTransform旋转视图只起作用一次吗?

ios PWA从外部链接返回后降低了innerheight

磁盘上的Objective-C ISA指针与实例化对象时的比较

分配给指针会通过 class_addMethod 导致 EXC_BAD_ACCESS

iOS 16.4,SwiftUI 底部工作表有时会忽略presentationDetents

更改初始控制器无效

具有多个目标的应用程序的动态内容

SwiftUI Disclosure Group 文本对齐

iOS 是否支持使用独立 .xib 文件创建的嵌套自定义子视图?

如何在Collection 后更改并保留按钮 colored颜色 ,然后在 SwiftUI 中切换回来?

在 UICollectionView 上动态设置布局导致莫名其妙的 contentOffset 变化

界面生成器 - 无法从路径加载设计对象(空)

如何使用 swift 显示 .svg 图像

动画 UILabel 字体大小更改

如何用 Swift 圆化 UILabel 的边缘

UITextView 从文本的底部或中间开始

Sierra 中的安全/协同设计: keys 串忽略访问控制设置和 UI 提示权限

如何从 UIPickerView 获取选定的值

我可以通过 UIAppearance 代理设置哪些属性?

Flutter:如何创建一个新项目