Reputation: 695
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
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
Reputation: 397
viewWillAppear
is a better place to put the becomesFirstResponder
. Try that.
Upvotes: 4