2017-05-19 3 views
-2

angezeigt wird. Ich habe zwei Textfelder in einer Unteransicht und versuche Subview nach oben zu verschieben, wenn Textfelder innerhalb von Subview und Tastatur angezeigt werden. Das Problem ist, dass die Teilansicht nach unten verschoben wird, wenn die Teilansicht geöffnet ist und ich auf das zweite Textfeld geklickt habe. Es sollte sich verstecken, wenn ich irgendeine Ansicht außer Textfeldern berühre.Unteransicht nach oben verschieben, wenn die Tastatur über Textfeldern in der Unteransicht

Die Definition meiner zwei Textfeld und Subview;

@IBOutlet weak var emailTextField: UITextField! 
@IBOutlet weak var passwordTextField: UITextField! 
@IBOutlet weak var loginView: UIView! 

Der Code in viewDidLoad

NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil) 

    NotificationCenter.default.addObserver(self, selector:#selector(keyboardWillHide), name: .UIKeyboardWillShow, object: nil) 

und zwei weiteren Funktionen, die ein- und ausgeblendet Tastatur

func keyboardWillShow(notification: NSNotification) { 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if loginView.frame.origin.y == 0{ 
      let height = keyboardSize.height 

      self.loginView.frame.origin.y += height 
     } 

    } 

} 

func keyboardWillHide(notification: NSNotification) { 


    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if loginView.frame.origin.y != 0 { 
      let height = keyboardSize.height 
      self.loginView.frame.origin.y -= height 
     } 

    } 
} 

Ich mag würde wissen, wie kann ich subview vermeiden, als ich Textfeld klicken, während Unteransicht ist up.

Antwort

0

Machen Sie den y-Ursprung der Ansicht einfach auf Null, wenn die Tastatur nicht funktioniert. Wenn Sie auf das andere Textfeld tippen, während die Tastatur geöffnet ist, ist dies der Fall. func keyboardWillHide (Meldung: NSNotification) {

func keyboardWillShow(notification: NSNotification) { 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if loginView.frame.origin.y == 0{ 
      let height = keyboardSize.height 

      self.loginView.frame.origin.y = -height 
     } 

    } 

} 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     if loginView.frame.origin.y != 0 { 
      let height = keyboardSize.height 
      self.loginView.frame.origin.y = 0 
     } 

    } 
} 
+0

Ich will nicht subview bis an die Spitze der self.view zu bewegen, ich will nur subview so viel wie Tastaturen Höhe zu bewegen. Und danke, aber dein Vorschlag hat nicht so funktioniert, wie ich es erwartet hatte, genauso wie bei mir. – mehmeet43

+0

Mein Code verschiebt die Ansicht entsprechend der Höhe der Tastatur nach oben. Standardmäßig ist Ihr y-Ursprung der Tastatur 0 und wenn die Tastatur hochkommt, nehmen wir an, dass die Höhe 100 ist, also sollte Ihre Ansicht bei -100 y-Ursprung liegen, so tut es mein Code. Mein Code wird die Ansicht unabhängig von der letzten Quelle auf 100 Punkte verschieben. Aber du hast die Sicht nach oben verschoben, um 100 Punkte von seiner vorherigen y-Position nach oben zu bewegen. Also entferne ich einfach + = mit (- height) es wird nicht das y subtrahieren, es negiert nur y y Wert. –

Verwandte Themen