LoginSignup
1
3

More than 5 years have passed since last update.

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

Posted at

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

はじめに結論から

準備

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

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3