2017-04-07 104 views
2

这里我有一个简单的例子。即时呼吁FirstResponderviewDidLoad。但配件视图仅在点击屏幕后显示。为什么不从一开始就展示?becomeFirstResponder not displayed from 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

'accessoryView.becomeFirstResponder()'而不是'self.becomeFirstResponder()'? – Larme

+0

@Larme Nope。 ;/ – HelloimDarius

回答

4

viewWillAppear是一个更好的地方把becomesFirstResponder。试试看。

+0

所以我试过这个与我目前的项目,它没有工作。但尝试创建一个示例,它确实..我使用页面视图控制器,并在其中一页应成为第一响应者,但一定要重写它...噢,以及.. – HelloimDarius

2

因此,有些事情正在辞退我的第一响应者(正如我使用的UIPageViewController)。所以我已将此添加到我的UIViewControler

override var canResignFirstResponder: Bool { return false } 

就是这样。干杯!