質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

5956閲覧

inputAccessoryView内にある、UITextViewにフォーカスを当てたい

Yukihiro.Y

総合スコア13

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2016/07/25 02:26

お知恵をお貸しください。

説明が非常に難しいのですが、キーボードにinputAccessoryViewで、表示や非表示になると追随して表示されたり消えるviewを追加します。

inputAccessoryViewのsubviewにUITextViewがあり、そのUITextViewにbecomeFirstResponder()でフォーカスが当たったら、キーボードを表示したく思います。

イメージ説明

この画像にあるself.viewの部分をタップをしたら、inputAccessoryView内のUITextViewにフォーカスが当たった状態にしたいです。

現状では、

Swift

1let inputTextView = UITextView() 2 3override func viewDidLoad() { 4 5 //inputAccessoryViewにするためのUIViewを作製 6 let keyboardAcssView = UIView() 7 keyboardAcssView.frame = CGRectMake(0, 0, self.view.frame.width, 40) 8 keyboardAcssView.backgroundColor = UIColor.darkGrayColor() 9 //入力対象のUITextViewを作製追加 10 inputTextView = UITextView() 11 inputTextView.frame = CGRectMake(20,5,310,30) 12 inputTextView.backgroundColor = UIColor.whiteColor() 13 14 //self.viewにタップイベント追加 15 let tapGesture = UITapGestureRecognizer(target: self,action:#selector(tapGes(_:))) 16 self.scrollView.addGestureRecognizer(tapGesture) 17} 18 19 //タップされて呼ばれる関数 20func tapGes(sender:UITapGestureRecognizer){ 21 //フォーカスを与える。 22 inputTextView.becomeFirstResponder() 23}

重ねてになりますが、inputAccessoryView内にあるUITextFieldにフォーカスを与えたいのですが、現状のコードでは、キーボードすら表示されません。
なんとかいい方法がないでしょうか?

できれば、いろいろ面倒なのでinputAccessoryViewを使って実装したいのですが....

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

画面に存在していないTextFieldにbecomeFirstResponder()を設定できないのでキーボードすら表示されないということですね。

回避策を用いてやりたいという事ができたので下記に載せておきます。

① ダミーのテキストフィールドを画面に乗せておく(hiddenでかくしてOK)
② キーボードが表示された後に呼ばれる通知を登録
③ 画面をタップした時のイベントでダミーのテキストフィールドに対してbecomeFirstResponder()を呼び出します。
④ キーボードが表示された後のイベントでフォーカスをinputTextViewに切り替える。

以上です、参考にしてみてください。

swift

1import UIKit 2 3class ViewController: UIViewController, UITextFieldDelegate, UITextViewDelegate { 4 5 var inputTextView = UITextView() 6 @IBOutlet weak var dummyTextField: UITextField! 7 8 override func viewDidLoad() { 9 10 dummyTextField.hidden = true 11 12 // キーボード表示後に呼ばれる通知を登録 13 NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.didShowKeyboardNotification(_:)), name: UIKeyboardDidShowNotification, object: nil) 14 15 //inputAccessoryViewにするためのUIViewを作製 16 let keyboardAcssView = UIView() 17 keyboardAcssView.frame = CGRectMake(0, self.view.frame.size.height - 40, self.view.frame.width, 40) 18 keyboardAcssView.backgroundColor = UIColor.darkGrayColor() 19 20 //入力対象のUITextViewを作製追加 21 inputTextView = UITextView() 22 inputTextView.frame = CGRectMake(20,5,310,30) 23 inputTextView.backgroundColor = UIColor.whiteColor() 24 keyboardAcssView.addSubview(inputTextView) 25 26 dummyTextField.delegate = self 27 dummyTextField.inputAccessoryView = keyboardAcssView 28 29 // self.viewにタップイベント追加 30 let tapGesture = UITapGestureRecognizer(target: self,action:#selector(tapGes(_:))) 31 self.view.addGestureRecognizer(tapGesture) 32 } 33 34 deinit { 35 NSNotificationCenter.defaultCenter().removeObserver(self) 36 } 37 38 // タップされて呼ばれる関数 39 func tapGes(sender:UITapGestureRecognizer){ 40 dummyTextField.becomeFirstResponder() 41 } 42 43 func didShowKeyboardNotification(notification: NSNotification) { 44 inputTextView.becomeFirstResponder() 45 } 46}

投稿2016/07/27 10:37

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yukihiro.Y

2016/07/29 07:27

回答ありがとうございます。やはりview外に隠したtextViewに一度フォーカスを与える方法しかないようですね。 コードを参考に実装させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問