質問: ※詳細な情報が不足しているので、確認次第追記します 当方Swift初心者ですが、XCode8.2.1,Customkeyboard Extension,Swift3にてカスタムキーボードを作成しています。 フリック入力がなかなかうまく実装できません。 実装の仕方には2種類ほどあるように考えています。 1UIResponderクラスを使用して実装する 2UIGestureRecognizerを使用して実装する 【試してみた事】 1のUIResponderクラスで実装しようとしたが、swiftでのネット、書籍でのサンプルがほぼない(objectiveCならある、が読めない...)ので2をやってみる。 2のUIGestureRecognezerを使ってみたが、指を離したタイミングでテキスト入力のイベント(InsertTextメソッド)を走らせようとしてみたが、エラー。 ※カスタムキーボードからtextfieldへの入力イベントを走らせる方法としてUITextDocumentProxyのinsertTextメソッドを使用。(UIInputViewControllerの子クラス) ※カスタムキーボードエクステンションのビュー自体がUIInputViewControllerクラスを継承しているため、上記のメソッドを使用 【知りたい事】 ・カスタムキーボードを使ってテキストビューに文字入力を実装する際に、UITextDocumentProxyのinsertTextメソッド意外に実装方法があるかどうか ・UITextDocumentProxyのinsertTextメソッドはUILabelに対しても実装する事ができるか。 ・UIGestureRecognizerでボタンを離した際のイベントとして、insertTextメソッドを実装する事ができるか。できるのであればどのような方法になるか ・UIResponderクラスを使用して、UIButtonにinsertTextメソッドを実装可能かどうか。どのように実装すれば良いか。 具体的なソースもなく申し訳ありませんが、可能かどうか、もしくは実装可能であればこのようなところに注意して実装すれば良いなどアドバイスがあると大変助かります。
回答: > > ・UIResponderクラスを使用して、UIButtonにinsertTextメソッドを実装可能かどうか。どのように実装すれば良いか。 > > > に回答します 以下は`UIButton`に実装した例ではありませんが、`UIResponder`を使用し、タッチした座標を元に`insertText`を呼び出し(呼び分け)ているものです 参考になればうれしいです ``` class KeyboardController: UIInputViewController { var beganX: CGFloat = 0.0 // タッチが開始した時のX座標 var endX: CGFloat = 0.0 // タッチが終了した時のX座標 // タッチが開始した時の処理 override func touchesBegan(_ touches: Set, with event: UIEvent?) { // X座標を更新 let touchEvent = touches.first! beganX = touchEvent.location(in: self.view).x } // タッチ中の処理(今回は特になし) override func touchesMoved(_ touches: Set, with event: UIEvent?) { } // タッチが終了した時の処理 override func touchesEnded(_ touches: Set, with event: UIEvent?) { // X座標を更新 let touchEvent = touches.first! endX = touchEvent.location(in: self.view).x // 座標を元にinsertTextを呼ぶ if endX - beganX > 0 { self.textDocumentProxy.insertText("みぎ") } else { self.textDocumentProxy.insertText("ひだり") } } // タッチイベントがキャンセルされた時の処理(今回は特になし) override func touchesCancelled(_ touches: Set, with event: UIEvent?) { } } ``` 参考にしたサイト: [iPhone] 画像をドラッグさせる (Swift)