UITextFieldPickerInput 0.1.1

UITextFieldPickerInput 0.1.1

Omran 维护。



  • 作者
  • Omran Aleid

license Build Status codecov

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和更新数据

如果您想更改UI(颜色或文本...)则可以使用PickerInputSettings

这将允许您更新以下属性和它们的默认值

     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]])