我创建了一个应用程序表单,在某些字段中我使用数字键盘。由于缺少关闭按钮,我进入了包含关闭按钮的uibar。
我目前为每个字段创建一个uibar,因为我必须指定目标。是否可以只创建一个具有多个目标的uibar?
@IBOutlet weak var TXTNome: UITextField!
@IBOutlet weak var TXTAltezza: UITextField!
@IBOutlet weak var TXTPeso: UITextField!
@IBOutlet weak var TXTEta: UITextField!
// Altezza
let keyboardToolbar = UIToolbar(frame: CGRect(x: 0, y: 0,
width: self.view.bounds.size.width,
height: 44))
keyboardToolbar.barStyle = UIBarStyle.blackTranslucent
keyboardToolbar.backgroundColor = UIColor.red
keyboardToolbar.tintColor = UIColor.white
let flex = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let save = UIBarButtonItem(title: "Chiudi",
style: .done,
target: TXTAltezza,
action: #selector(resignFirstResponder))
keyboardToolbar.setItems([flex, save], animated: false)
TXTAltezza.inputAccessoryView = keyboardToolbar
// Peso
let keyboardToolbar2 = UIToolbar(frame: CGRect(x: 0, y: 0,
width: self.view.bounds.size.width,
height: 44))
keyboardToolbar2.barStyle = UIBarStyle.blackTranslucent
keyboardToolbar2.backgroundColor = UIColor.red
keyboardToolbar2.tintColor = UIColor.white
let flex2 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let save2 = UIBarButtonItem(title: "Chiudi",
style: .done,
target: TXTPeso,
action: #selector(resignFirstResponder))
keyboardToolbar2.setItems([flex2, save2], animated: false)
TXTPeso.inputAccessoryView = keyboardToolbar2
等等
let toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.default
toolBar.isTranslucent = true
toolBar.sizeToFit()
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(doneClickOk))
toolBar.setItems([doneButton], animated: false)
toolBar.isUserInteractionEnabled = true
yourTextField.inputAccessoryView = toolBar
yourOthersTextfields.inputAccessoryView = toolBar
**Than call selector method**
@objc func doneClickOk(){
view.endEditing(true)
}
var keyConstTextField : UInt = 0
extension UIToolbar {
func addToolBar(_ vc : UIViewController,textFiled : UITextField) -> UIToolbar {
let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 44))
toolBar.isTranslucent = true
let button = UIButton(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 44))
button.setTitle("DONE", for: .normal)
button.titleLabel?.font = UIFont(name: "OpenSans-Semibold", size: 17.0)
button.addTarget(vc, action: #selector(UIViewController.toolBarDoneButtonPressed(_:)), for: .touchUpInside)
button.backgroundColor = .white
button.titleLabel?.textColor = UIColor.black
let done = UIBarButtonItem(customView: button)
let fixSpace1 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
let fixSpace2 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)
objc_setAssociatedObject(button, &keyConstTextField, textFiled, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
toolBar.setItems([fixSpace1,done,fixSpace2], animated: false)
return toolBar
}
}
extension UIViewController {
//TODO:- To get textfield on specific in below override. You have to fetch from OBJC using keyConstTextField key.
@objc func toolBarDoneButtonPressed(_ sender : UIButton) {
self.view.endEditing(true)
if let textField = objc_getAssociatedObject(sender, &keyConstTextField) as? UITextField {
print(textField.text ?? "Not Found....")
}
}
}
使用上述方法,您可以使用
UIViewController
扩展名定义常用操作。