gpt4 book ai didi

ios - 子类化 UITextField 以包含选择器和工具栏

转载 作者:搜寻专家 更新时间:2023-10-31 22:53:12 25 4
gpt4 key购买 nike

问题

我有一个具有用户注册 View 的应用程序。它有许多 UITextField,其中许多都有一个带有嵌入工具栏的选择器以关闭选择器,即:

myTextField.inputView = myPicker
myTextField.inputAccessoryView = myToolbar

基本上我想在我的应用程序的不同部分重用这些文本字段,所以我想到了 UITextField 的子类,比如 PickerUITextField

尝试

我试过这样的:

class PickerUITextField: UITextField {
let picker = UIPickerView()
let toolbar = UIToolbar()

override init(frame: CGRect) {
super.init(frame: frame)
setup()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}

private func setup() {
withToolbar()
self.inputView = self.picker
self.inputAccessoryView = self.toolbar
}

private func withToolbar() {
toolbar.barStyle = UIBarStyle.default
toolbar.isTranslucent = true
let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace,
target: nil, action: nil)
let doneButton = UIBarButtonItem(title: "Done", style: .done,
target: self, action: #selector(removeToolBar))

toolbar.setItems([space, doneButton], animated: false)
toolbar.isUserInteractionEnabled = true
toolbar.sizeToFit()
}

@objc func removeToolBar() {
self.resignFirstResponder()
}

}

问题

但是,我如何在 View Controller 中检测到用户按下了我的 PickerUITextField 的“完成”按钮?换句话说:

class UserRegistrationViewController: UIViewController {

@IBOutlet weak var country: PickerUITextField!

// I want this to be triggered whenever the country picker closes
func didSelectCountry() {
print("User selected \(country.text!)")
}

}

谢谢你的帮助。

最佳答案

您可以在 PickerUITextField 中创建一个闭包来执行完成按钮操作。

class PickerUITextField: UITextField {
let picker = UIPickerView()
let toolbar = UIToolbar()
var doneBtnAction:(() -> Void)?


override init(frame: CGRect) {
super.init(frame: frame)
setup()
}

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}

private func setup() {
withToolbar()
self.inputView = self.picker
self.inputAccessoryView = self.toolbar
}

private func withToolbar() {
toolbar.barStyle = UIBarStyle.default
toolbar.isTranslucent = true
let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace,
target: nil, action: nil)
let doneButton = UIBarButtonItem(title: "Done", style: .done,
target: self, action: #selector(removeToolBar))

toolbar.setItems([space, doneButton], animated: false)
toolbar.isUserInteractionEnabled = true
toolbar.sizeToFit()
}

@objc func removeToolBar() {
doneBtnAction?()
self.resignFirstResponder()
}

}

并且在您的 View Controller 中,您可以分配一个闭包。当您点击完成按钮时,它将被调用。

class UserRegistrationViewController: UIViewController {

@IBOutlet weak var country: PickerUITextField!

override func viewDidLoad() {
super.viewDidLoad()
country.doneBtnAction = { [weak self] in
print("User selected \(self?.country.text!)")
}
}
}

关于ios - 子类化 UITextField 以包含选择器和工具栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55880118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com