UIPickerView 作为 UITextView 的输入视图 swift

UIPickerView as inputView for UITextView swift

我使用 UIPickerView 作为 UITextView 的输入视图。 selectRow: 函数不能 select 正确地替代时间

这是代码

func textViewDidBeginEditing(_ textView: UITextView) {
    let inputView = UIView(frame: CGRect(x: 0,y: 0, width: self.view.frame.width, height: 240))
    let codePicker = UIPickerView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 240))
    codePicker.tag = 2

    if codePicker.dataSource == nil {
        codePicker.dataSource = self
    }
    if codePicker.delegate == nil {
        codePicker.delegate = self
    }

    codePicker.showsSelectionIndicator = true
    print("selectedBankRow: \(selectedRow)")
    codePicker.selectRow(selectedRow, inComponent: 0, animated: true)
    inputView.addSubview(codePicker)
    textView.inputView = inputView
    return
}

打印语句打印正确的行,但是 selectRow: 函数 select 是 selected 的前一个值,可能是什么错误?甚至状态栏每次交替变黑也仅针对此 UITextView 交互。

不要每次都创建 UIPickerView

创建全局对象

var codePicker = UIPickerView()

并在 viewDidLoad 方法中

添加以下代码

let inputView = UIView(frame: CGRect(x: 0,y: 0, width: self.view.frame.width, height: 240))
codePicker = UIPickerView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 240))
codePicker.tag = 2
codePicker.dataSource = self
codePicker.delegate = self

codePicker.showsSelectionIndicator = true
print("selectedBankRow: \(selectedRow)")
codePicker.selectRow(selectedRow, inComponent: 0, animated: true)
inputView.addSubview(codePicker)
textView.inputView = inputView

当你用

解决状态栏问题时
IQKeyboardManager.sharedManager().canAdjustAdditionalSafeAreaInsets = true

希望对您有所帮助