LoginSignup
0
2

More than 5 years have passed since last update.

UIViewをTextViewのkeyboardにinputView

Posted at

on.gif

iOS版のevernoteではこのような実装がありますよね。どうやってるんだと調べながら実装してみました。実装自体はツールバーをinputaccessoryするのと同じノリで結構安易に動きます。備忘録の為に書き残しておきます。

リファレンス

reference.swift

// Presented when object becomes first responder.  If set to nil, reverts to following responder chain.  If
    // set while first responder, will not take effect until reloadInputViews is called.
    open var inputView: UIView?

    open var inputAccessoryView: UIView?


実装

ViewController.swift


import UIKit
let TestView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: 250, height: 250))


class ViewController: UIViewController, UITextViewDelegate {

    @IBOutlet weak var textView: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        textView.delegate = self
        let bgColor = UIColor.blue
        TestView.backgroundColor = bgColor
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func keyboardToolbar(textView: UITextView) {

        let toolbar: UIToolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 1, height: 1))
        toolbar.barStyle = UIBarStyle.default
        toolbar.bounds.size.height = 28

        let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil)


        let done: UIBarButtonItem = UIBarButtonItem(title: "keyboard", style: UIBarButtonItemStyle.done, target: self, action: #selector(self.doneButtonActionn))
        done.tintColor = UIColor.red

        let clear: UIBarButtonItem = UIBarButtonItem(title: "UIView", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.doneButtonAction))
        clear.tintColor = UIColor.black


        var items = [UIBarButtonItem]()

        items.append(clear)
        items.append(flexSpace)
        items.append(done)
        toolbar.items = items
        toolbar.sizeToFit()
        textView.inputAccessoryView = toolbar
    }

    func doneButtonAction() {
        textView.inputView = TestView
        textView.resignFirstResponder()
        textView.becomeFirstResponder()
    }

    func doneButtonActionn() {
        textView.inputView = nil
        textView.reloadInputViews()
    }

    func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
        self.keyboardToolbar(textView: textView)
        return true
    }
}

参考

switching inputview for uitextfield
How to refresh keyboard/returnKey while editing textField in Swift?

0
2
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
0
2