LoginSignup
4
3

More than 5 years have passed since last update.

iOS9でiPadのキーボードに表示されるUndo/Redo/Pasteボタンの処理

Posted at
  • Xcode6.4

概要

自前でテキストエディタのようなものを実装したアプリがありまして、iOS9で動作させるとキーボードの上の方に何やらボタン(ショートカットバー?)が増えていて、これを一体どうやったらアプリで押せるようになるのかを調べたので適当に残しておきます。

Screen Shot 2015-10-19 at 14.44.58.png

Paste

canPerformActionで固定のアクションに対する問い合わせが来るので、それに応答すれば良さそう。

    override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
        if action == "paste:" {
            return true
        }
        return false
    }

    override func paste(sender: AnyObject?) {
        println("paste called!!")
    }

※どこかでpaste:って文字定義されてないですかね...

同様に、cut:, copy:, toggleBoldface:, toggleItalics:, toggleUnderline: という問い合わせも来るので、切り取りやコピーなどもここで実装すれば良さそうです。
(選択範囲が有ると切り取りなどのボタンが出るため)

Undo/Redo

で、canPerformAction系ではUndo/Redoの問い合わせが来ません...

こちらは

override var undoManager: NSUndoManager? { return hogehoge }

というように、NSUndoManagerのインスタンスの要求に応えてあげれば良さそうです。
私はアンドゥ/リドゥ処理にNSUndoManagerを使っていないので、アダプター的な感じでNSUndoManagerをオーバーライドしようと考えています。

適当なコード
class TestUndoManager : NSUndoManager {
    override var canUndo: Bool { return true }
    override var canRedo: Bool { return true }
    override func undo() {
        println("undo called!!")
    }
    override func redo() {
        println("redo called!!")
    }
}

終わりに

とりあえず調べただけで、まだ実装はしていないので、何かお釣りが出るような事があったらすみません。

暫定的なiOS9対応はこんなところかな...

4
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
4
3