2017-07-13 2 views
1

Ich mache eine einfache Kontaktformular mit Name, E-Mail-Adresse und Nachricht. Der folgende Code in meinem viewDidLoad ist ein Ausschnitt des Textfelds Name. Ich möchte, dass sich die Tastatur auf diesem Feld öffnet, wenn ich das Kontaktformular öffne.Swift - Kontaktseite mit Tastatur öffnen

override func viewDidLoad() { 
    view.backgroundColor = UIColor.darkGray 
    let fullNameInput = UITextField() 
    fullNameInput.frame = CGRect(x: 15, y: 15, width: self.view.frame.width - 2 * margin, height: 50) 
    fullNameInput.placeholder = "Your Name" 
    let fullNameString = "Your Name" 
    let fullNamePlaceholder = NSMutableAttributedString(string: fullNameString) 
    let fullNameRange = (fullNameString as NSString).range(of: fullNameString) 
    fullNamePlaceholder.addAttribute(NSForegroundColorAttributeName, value: UIColor.white, range: fullNameRange) 
    fullNameInput.attributedPlaceholder = fullNamePlaceholder 
    fullNameInput.backgroundColor = .black 
    fullNameInput.delegate = self 
    fullNameInput.layer.cornerRadius = 5.0 
    fullNameInput.layer.borderWidth = 2.0 
    fullNameInput.layer.borderColor = UIColor.black.cgColor 

    fullNameInput.becomeFirstResponder() 
    self.view.addSubview(fullNameInput) 
} 

In-Browsing für eine Lösung glaube ich

fullNameInput.becomeFirstResponder() 

die Codezeile, die ich dies erreichen will. Aber es tut es nicht. Fehle ich hier etwas?

Zusätzliche Frage

Im Anschluss daran würde ich auch eine Scrollview für den Bereich oberhalb der offenen Tastatur machen.

Wie bekomme ich auch den Rahmen der Tastatur?

Ich verwende Swift 3.0 und iOS 9.2

+0

zunächst, rufen 'super.viewDidLoad()', wenn u irgendeine Lebenszyklus-Funktion in Ihrem vc zwingende. – dirtydanee

+0

Welche OS-Version verwenden Sie? Was für eine schnelle Version? Wenn Sie Ihren Code in mein Beispielprojekt auf Swift 3.0 unter iOS 10.3 Simulator einfügen, wird die Tastatur geöffnet. – dirtydanee

+0

Swift 3.0 und iOS 9.2. Ich habe diese Info zu meiner Frage hinzugefügt, danke. Ich habe auch eine Lösung akzeptiert. – ochhii

Antwort

1

Sie haben diese anrufen aus viewDidAppear

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    fullNameInput.becomeFirstResponder() 
} 
+0

sollten Sie die 'animierte' Eigenschaft beim Aufruf von super verwenden, nicht hart codieren' true'. – dirtydanee

1

Von documentation auf becomeFirstResponder():

rufen Sie nie diese Methode auf eine Ansicht, die nicht Teil einer aktiven Ansicht Hierarchie ist.

Also von viewDidLoad anrufen ist definitely keine gute Idee. Versuchen Sie von viewDidAppear

0

Sie machen die fullNameInput werden erste Antwortgeber, bevor es in der Ansicht enthalten war.

Fügen Sie es einfach als Subview zuerst hinzu, dann nennen Sie es als Ersthelfer und es wird funktionieren.

Und ich würde tun, wie mag_zbc sagte. Verwenden Sie die werden Ersthelfer auf dem ViewDidAppear

Verwandte Themen