2017-05-03 6 views
0

Je souhaite afficher un UIView personnalisé au-dessus de mon clavier, lorsque mon champ de texte devient le premier répondeur.Puis-je afficher à la fois le clavier et la vue d'entrée pendant que textField devient le premier répondeur?

Cependant, il semble que je peux afficher la vue et le clavier les deux en même temps?

est-il un moyen de le surmonter?

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    phoneInputTextField.becomeFirstResponder() 

    NotificationCenter.default.addObserver(self, selector: #selector(handleKeyboardNotification), name: NSNotification.Name.UIKeyboardWillChangeFrame , object: nil) 
} 


    func handleKeyboardNotification(notification: NSNotification) { 

    guard let userInfo = notification.userInfo, 
     let frameValue = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue 
     else { return } 

    let customView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: frameValue.cgRectValue.width + 20)) 
    customView.backgroundColor = UIColor.black 

    phoneInputTextField.inputView = customView 

} 

Ce code affiche uniquement le clavier.

+0

D'abord, le '.inputView' * * remplace le clavier , donc vous ne pouvez pas montrer les deux en même temps de toute façon ... voulez-vous réellement '.inputAccessoryView'? – DonMag

Répondre

1

Vous pouvez utiliser inputView et inputAccessoryView les deux.

  • inputView permet d'attribuer une certaine vue personnalisée en remplacement de UIKeyboard, comme vous pouvez utiliser UIPickerView, UIDatePicker etc lors de l'édition du textField

  • inputAccessoryView est également utilisé pour attribuer une certaine vue personnalisée, mais sans remplacer un UIKeyboard, il rend au-dessus du clavier. Comme vous pouvez utiliser UIToolbar au-dessus du clavier et de nombreux autres View selon vos besoins.

Dans votre cas, vous pouvez utiliser inputAccessoryView

exemple:

yourTxtField.inputAccessoryView = yourCustomView()