Swift
swift4

UITextFieldに入力する際,キーボードの上にprev, next, doneボタンを設置する方法

一応まんまコピペで追加すれば動くはずです。

はじめに結論から

準備

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を預けています。
これ気持ち悪いのでなんか他にいい方法あったら変えたいです。