一応まんまコピペで追加すれば動くはずです。
はじめに結論から
準備
ViewControllerにUITextFieldDelegate
を追加しておく
コード
var currentTextField : UITextField?
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
let toolBar = UIToolbar()
toolBar.barStyle = UIBarStyle.default
toolBar.sizeToFit()
currentTextField = textField
let left = UIBarButtonItem(title: "<", style: .plain, target: self, action: #selector(tapLeft))
let right = UIBarButtonItem(title: ">", style: .plain, target: self, action: #selector(tapRight))
let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
let done = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(tapDone))
toolBar.items = [left, right, space, done]
textField.inputAccessoryView = toolBar
return true
}
@objc func tapDone(){
self.view.endEditing(true)
}
@objc func tapLeft(){
guard let tag = currentTextField?.tag, let nextTextField = self.view.viewWithTag(tag - 1) else{
return
}
nextTextField.becomeFirstResponder()
}
@objc func tapRight(){
guard let tag = currentTextField?.tag, let nextTextField = self.view.viewWithTag(tag + 1) else {
return
}
nextTextField.becomeFirstResponder()
}
コードについて
#selector()
に引数が渡せないみたいなので苦肉の策で外の変数currentTextField
に一度現在アクティブなtextFieldを預けています。
これ気持ち悪いのでなんか他にいい方法あったら変えたいです。