2017-07-14 2 views
0

Ich habe eine Xib UIView, die eine TextField enthält. Ich möchte, dass mein TextField den Fokus erhält, wenn die Eltern-UIView berührt wird. Was ist der aktualisierte richtige Weg, dies zu tun mit Swift 3+? Und ist es möglich, dies vollständig vom Storyboard aus zu tun? (Ich bin zur Zeit auf Xcode 9 Beta, aber früher Lösung sind willkommen)Weiterleiten eines Tippereignisses von einer UIView an eine innere TextField

Hier ist mein Code:

import UIKit 

@IBDesignable 
open class MinimalEditView: UIView, UITextFieldDelegate { 

    @IBOutlet var textField: UITextField! 

    @IBInspectable 
    public var cornerRadius: CGFloat = 2.0 { 
     didSet { 
      self.layer.cornerRadius = self.cornerRadius 
     } 
    } 

    @IBInspectable 
    public var borderWidth: CGFloat = 2.0 { 
     didSet { 
      self.layer.borderWidth = self.borderWidth 
     } 
    } 

    @IBInspectable 
    public var borderColor: UIColor = UIColor.intactBeigeLight { 
     didSet { 
      self.layer.borderColor = self.borderColor.cgColor 
     } 
    } 

    public func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { 
     self.textField.becomeFirstResponder() 
     return true 
    } 

    public override init(frame: CGRect) { 
     super.init(frame: frame) 

    } 
    public required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

} 

Antwort

0

Zuerst in Ihrem viewDidLoad eine Gestenerkenner fügen Sie einen Hahn Aktion auf Ihrer erkennen Aussicht. Der Blick sollte auf Ihre Textfeld platziert werden

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(viewTapped)) 
view.isUserInteractionEnabled = true 
view.addGestureRecognizer(tapGestureRecognizer) 

Dann, wenn Sie Ihre Ansicht angezapft wird, weisen den Fokus auf das Textfeld

func viewTapped() 
{ 
    self.textField.becomeFirstResponder() 
} 
+0

Ich kann nicht viewDidLoad außer Kraft setzen, da es nicht ein Viewcontroller ist, ist es ein xib – Jaythaking

+0

@Jaythaking Sicher, setzen Sie ihn dann nach oben in Ihrem 'wakeFromXib' –

+0

TextField kommt als Null und es stürzt ab ... aber es ist gut verbunden mit der Steckdose: '(Was mache ich falsch? – Jaythaking

0

Sie UITapGestureRecognizer auf dem übergeordneten Ansicht hinzufügen können. Behandeln Sie die Tippgeste, wenn Sie auf Ihre Ansicht tippen, weisen Sie Ihrem Textfeld den Fokus zu.

In Ihrem awakeFromNib hinzufügen UITapGestureRecognizer als

let tap = UITapGestureRecognizer(target: self, action: #selector(viewTapped)) 
yourParentView.isUserInteractionEnabled = true 
yourParentView.addGestureRecognizer(tap) 

Griff Hahn als

func handleTap(_ gesture: UITapGestureRecognizer){ 
{ 
    self.yourTextField.becomeFirstResponder() 
} 
Verwandte Themen