HelloimDarius
HelloimDarius

Reputation: 695

becomeFirstResponder not showing from viewDidLoad

Here I have a simple example. im calling FirstResponder in viewDidLoad. But accessory view only shows up after tapping the screen. Why isn't it showing from the start?

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()
    }


}

Upvotes: 2

Views: 613

Answers (2)

HelloimDarius
HelloimDarius

Reputation: 695

So something was resigning my first responder (as I was using UIPageViewController). So I've added this to my UIViewControler :

override var canResignFirstResponder: Bool { return false }

That's it. Cheers!

Upvotes: 2

Radagast the Brown
Radagast the Brown

Reputation: 397

viewWillAppear is a better place to put the becomesFirstResponder. Try that.

Upvotes: 4

Related Questions