2017-04-07 7 views
2

ここでは簡単な例があります。私はFirstResponderviewDidLoadに呼んでいます。しかし、付属品の表示は画面をタップした後にのみ表示されます。なぜそれは最初から表示されていないのですか?becomeFirstResponderがviewDidLoadから表示されない

class TestViewController: MainPageViewController { 

    private let accessoryView = UIView() //TextInputView() // MessageInputAccessoryView() 

    override var inputAccessoryView: UIView { 
     return accessoryView 
    } 

    override var canBecomeFirstResponder: Bool { return true } 



    override func viewDidLoad() { 
     super.viewDidLoad() 

     accessoryView.backgroundColor = .red 
     accessoryView.frame = CGRect(x: 0, y: 0, width: 300, height: 50) 
     self.becomeFirstResponder() 

     // Do any additional setup after loading the view. 

     let tap = UITapGestureRecognizer(target: self, action: #selector(tappo)) 
     self.view.isUserInteractionEnabled = true 
     self.view.addGestureRecognizer(tap) 

     tappo() 
    } 


    func tappo() { 
     self.becomeFirstResponder() 
    } 


} 
+1

'self.becomeFirstResponder()'ではなく 'accessoryView.becomeFirstResponder()'ですか? – Larme

+0

@Larme Nope。 ;/ – HelloimDarius

答えて

4

viewWillAppearbecomesFirstResponderを置くのに良い場所です。それを試してください。

+0

私は現在のプロジェクトでこれを試してみましたが、うまく動作しません。しかし、サンプルを作成しようとしたが、それは..私はページビューコントローラを使用していると、ページの1つが最初のレスポンダーになるはずですが、何かそれをオーバーライドする必要があります...ああ.. – HelloimDarius

2

何かが私の最初の応答者(私がUIPageViewControllerを使用していたように)を辞任していました。これを私のUIViewControlerに追加しました:

override var canResignFirstResponder: Bool { return false } 

これはそれです。乾杯!

関連する問題