UITextFieldPickerInput
这是一个小型库,用于帮助将选择器作为可编辑和管理内容的 UITextField 输入视图显示
安装
此库通过 CocoaPods 提供。您可以使用 Ruby gems 安装 CocoaPods
$ gem install cocoapods
然后简单地将 UITextFieldPickerInput
添加到您的 Podfile
pod 'UITextFieldPickerInput'
使用说明
1- 使您的模型或数据类型符合 Selectable 协议
如果您想使用自定义模型作为可选择的项
struct Cat {
var id: Int
var name: String
var extraInfo: String
}
extension Cat: Selectable {
var selectableValue: Any {
return id
}
var selectableText: String {
return name
}
}
或者例如简单的数据类型如 String
extension String: Selectable {
var selectableText: String {
return self
}
var selectableValue: Any {
return self
}
}
2- 定义您要从中选择的数据
键将为组件编号,值将为要从其中选择的对象数组。
let data: [Int: [Selectable]] = [
0: [Cat(id: 1, name: "cat1", extraInfo: "asdasd"), Cat(id: 2, name: "cat2", extraInfo: "asdasd")],
1: [Dog(id: 1, name: "dog1", extraInfo: "asdasd"), Dog(id: 2, name: "dog2", extraInfo: "asdasd")]
]
3- 在UITextfiled中加载Picker并获取每个组件选中的值
textField.loadPicker(data: data, onSelect: { [weak self] selected in
var displayedText = ""
if let selectedCat = selected[0] as? Cat {
displayedText = "Cat: \(selectedCat.name)"
}
if let selectedDog = selected[1] as? Dog {
displayedText.append(" Dog: \(selectedDog.name)")
}
self?.textField.text = displayedText
}) { selectedDone in
print(selectedDone)
}
textField.becomeFirstResponder()
自定义UI和更新数据
PickerInputSettings
如果您想更改UI(颜色或文本...)则可以使用这将允许您更新以下属性和它们的默认值
cancelButtonTitle: String = "Cancel"
doneButtonTitle: String = "Done"
toolBarStyle: UIBarStyle = .black
toolBarIsTranslucent: Bool = true
toolBarTintColor: UIColor = .black
toolBarBarTintColor: UIColor = .lightGray
hideDoneButton: Bool = false
hideCancelButton: Bool = false
isToolBarHidden: Bool = false
hideWhenSelect: Bool = false
例如
var settings: PickerInputSettings = PickerInputSettings()
settings.cancelButtonTitle = "new Title"
settings.hideWhenSelect = true
textField.updatePickerInput(with: settings)
您可以通过使用来更新特定组件的数据
textField.updatePickerInput(with: [Cat(id: 1, name: "updated cat 1", extraInfo: "foo"),
Cat(id: 2, name: "updated cat 2", extraInfo: "foo")],
component: 0)
或更新所有组件
只需要定义一个新的数据并传递给它
textField.updatePickerInput(with: [Int : [Selectable]])