UITextField
和UITextView
编写自定义可重用输入过滤
TextInputFilter:为
TextInputFilter 允许您编写内联和可重用的输入过滤,可以在输入时过滤或转换输入。相同的过滤可以用于UITextField
或UITextView
。
示例
这些示例展示了使用基本的输入过滤器的UITextField
用法,但您也可以使用相同的过滤与UITextView
。
编写一个输入过滤
输入过滤器可以以三种方式响应输入:
.accept
:按原样应用输入.transform
:设置输入的转换版本.reject
:拒绝输入且文本不改变
输入过滤器将安装一个处理`shouldChange...方法的代理,但任何其他代理方法都转发到原始`delegate`(即使是在输入过滤器之后设置的)。
此示例显示了一个非常简单的输入过滤器,仅将输入转换为大写。
import TextInputFilter
struct UppercaseInputFilter: TextInputFilter {
func result(for change: String, appliedTo original: String, replacingRange range: Range<String.Index>, changed: String) -> TextInputFilterResult {
return .transform(changed.uppercased())
}
}
设置输入过滤器
import TextInputFilter
struct UppercaseInputFilter: TextInputFilter {
func result(for change: String, appliedTo original: String, replacingRange range: Range<String.Index>, changed: String) -> TextInputFilterResult {
return .transform(changed.uppercased())
}
}
...
let textField = UITextField(frame: frame)
textField.setInputFilter(UppercaseInputFilter(), onChange: { print("Changed: \($0)") })
textField.delegate = self // You can still use delegate methods other than textField(_:shouldChangeCharactersIn:replacementString:)
要求
TextInputFilter与Swift 4.x及更高版本兼容,需要iOS 9.0及以上版本。
安装
复制文件
只需将文件拖放到您项目中的任何位置的 Sources
目录中。
框架
下载仓库,将 TextInputFilter.xcodeproj
拖入您自己的项目,并为您的平台链接合适的目标。
CocoaPods
在您的 Podfile
中
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
target 'TargetName' do
use_frameworks!
pod 'TextInputFilter'
end
Carthage
在您的 Cartfile
中
github "fabiorodella/TextInputFilter"
Swift 包管理器
在您的 Package.swift
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "TargetName",
dependencies: [
.package(url: "https://github.com/fabiorodella/TextInputFilter.git", from: "1.1.0"),
],
targets: [
.target(
name: "TargetName",
dependencies: ["TextInputFilter"]),
]
)