2017-04-07 176 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 } 

就是這樣。乾杯!