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?