Ios Textfileld带有uibar,用于关闭键盘垫
我创建了一个应用程序表单,在某些字段中我使用数字键盘。由于缺少关闭按钮,我进入了包含关闭按钮的uibar 我目前为每个字段创建一个uibar,因为我必须指定目标。是否可以只创建一个具有多个目标的uibarIos Textfileld带有uibar,用于关闭键盘垫,ios,swift,xcode,textfield,Ios,Swift,Xcode,Textfield,我创建了一个应用程序表单,在某些字段中我使用数字键盘。由于缺少关闭按钮,我进入了包含关闭按钮的uibar 我目前为每个字段创建一个uibar,因为我必须指定目标。是否可以只创建一个具有多个目标的uibar @IBOutlet weak var TXTNome: UITextField! @IBOutlet weak var TXTAltezza: UITextField! @IBOutlet weak var TXTPeso: UITextField! @IBOutlet weak var TX
@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
等等
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
扩展定义常见操作
我认为您所要做的就是将target添加到
self
,并使用视图控制器中的选择器。
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)
}