2016-12-13 4 views
0

Ich habe eine Ansicht innerhalb, dass ich 6 Textfelder habe, aber ich möchte die Ansicht nach oben verschieben, wenn ich auf das letzte Textfeld klicke, das ich Wert in das letzte Textfeld eingeben kann.Wie kann ich die Ansicht für das letzte Textfeld verschieben, wenn die Tastatur angezeigt wird?

Hier ist mein Code, aber es funktioniert für alle Textfelder: -

func animateViewMoving (up:Bool, moveValue :CGFloat){ 

    let movementDuration:TimeInterval = 0.3 
    let movement:CGFloat = (up ? -moveValue : moveValue) 

    UIView.beginAnimations("animateView", context: nil) 
    UIView.setAnimationBeginsFromCurrentState(true) 
    UIView.setAnimationDuration(movementDuration) 

    self.view.frame = self.view.frame.offsetBy(dx: 0, dy: movement) 
    UIView.commitAnimations() 
} 

So für bestimmte Textfield, wie kann ich die Ansicht auf (Tastaturgröße)

Dank bewegen

+0

Sie können mit automatischen Layout? – Ronak

+0

Sie können IQKeyboardManager für dieses Problem verwenden. – Amanpreet

+2

Hey, besser, IQKeyBoardManager zu verwenden. Es wird sich darum kümmern, die Ansichten selbst zu scrollen. – SNarula

Antwort

0
@IBOutlet var scrollView: UIScrollView! 
@IBOutlet var contentView: UIView! 
var textFieldActive:UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Keyboard notification 
    NotificationCenter.default.addObserver(self,selector: #selector(keyboardWasShown),name:NSNotification.Name.UIKeyboardDidShow, 
                object: nil) 
    NotificationCenter.default.addObserver(self,selector: #selector(keyboardWillHide),name:NSNotification.Name.UIKeyboardWillHide, 
                object: nil) 
    // Do any additional setup after loading the view. 
} 



func textFieldDidBeginEditing(_ textField: UITextField){ 

    textFieldActive = textField 
} 



// MARK: - Keyboard notification Method 
func keyboardWasShown(notification: NSNotification) 
{ 
    let userInfo = notification.userInfo 
    let keyboardSize = (userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 
    let contentInset = UIEdgeInsetsMake(0.0, 0.0, (keyboardSize?.height)!+100, 0.0) 
    self.scrollViewGroupMakeTakers.contentInset = contentInset 
    self.scrollViewGroupMakeTakers.scrollIndicatorInsets = contentInset 

    // Step 3: Scroll the target text field into view. 
    var aRect: CGRect = self.contentViewMakeTakers.frame; 
    aRect.size.height -= (keyboardSize?.height)!+100 
    if (!aRect.contains(textFieldActive!.frame.origin)) 
    { 

     let scrollPoint: CGPoint = CGPoint(x: 0.0, y: textFieldActive!.frame.origin.y - (keyboardSize!.height-150));    
self.scrollViewGroupMakeTakers.setContentOffset(scrollPoint, animated: true) 
    } 
} 
func keyboardWillHide(notification: NSNotification) 
{ 
    let contentInsets : UIEdgeInsets = UIEdgeInsets.zero 
    scrollViewGroupMakeTakers.contentInset = contentInsets; 
    scrollViewGroupMakeTakers.scrollIndicatorInsets = contentInsets; 
} 
+1

Ich habe es versucht. Es funktioniert für alle textFields – kishor0011

+0

@ kishor0011, wenn Sie dies als Ihre Antwort gefunden haben. akzeptiere es als Antwort – PiyushRathi

+0

Ich meine es funktioniert nicht für das letzte Textfeld. Es funktioniert für alle Textfelder. Danke – kishor0011

0

Versuchen Sie dies-

func textFieldShouldReturn(textField: UITextField) -> Bool { 

    if textField == lastTextField{ 

      view.frame.origin.y -= 50 //Or 100, 200 as you required 
      performAction() 

     } 
} 



func performAction() { 

     lastTextField.becomeFirstResponder() 
     otherTextField.resignFirstResponder() 

    } 
+0

Und vergessen Sie nicht, 'view.frame.origin.y = 0 'zu setzen, wenn Sie den letzten Text abbrechenFeld – iDeveloper

+0

Ich weiß das, aber ich möchte Tastaturgröße. Danach kann ich die Ansicht nach oben verschieben. Danke – kishor0011

+0

Hier statt 50 wie bekomme ich Tastaturgröße? Danke – kishor0011

0

Sie Angenommen verwenden autolayout

Ich stelle mir vor allen UITextField in einem separaten UIScrollView anwesend zu sein. Weiter wird UISCrollView eine untere Beschränkung für seine superView haben. Erstellen Sie eine IBOutlet für diese vertikale Einschränkung unteren Abstandes zu seiner Superansicht.

Hinweis: Sie können dies tun, auch wenn es nicht ein innen UIScrollView, indem einfach die untere Einschränkung Ihrer niedrigsten UITextField nehmen, aber das wird zwingen, Ihr andere UITextFields off-Bildschirm am besten so legt es in einem UIScrollView.

In Ihrem viewDidLoad Setup Beobachter wie folgt -

func viewDidLoad(){ 

    super.viewDidLoad() 

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

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

//and then: 
//MARK: Animate Keyboard 
func keyboardWillShow(notification : NSNotification){ 

    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 

     animateKeyboard(withConstraintValue: keyboardSize.size.height) 
    } 
} 

func keyboardWillHide(notification : NSNotification){ 

    animateKeyboard(withConstraintValue: 0) 
} 

func animateKeyboard(withConstraintValue: CGFloat){ 

    scrollViewBottomSpaceConstraint.constant = withConstraintValue 

    UIView.animate(withDuration: 0.3, animations: { 

     self.view.layoutIfNeeded() 
    }) 
} 
+0

Eigentlich verwende ich nicht scrollen Ansicht. Meine Anforderung ist, dass ich die Ansicht verschieben muss, wenn ich in das letzte Textfeld gehe. Alles ist in Ordnung abgesehen davon. – kishor0011

+0

Bitte lesen Sie den Hinweis :). Ich habe hinzugefügt, dass Sie dasselbe wie oben tun können, indem Sie einfach die untere Einschränkung des letzten 'UITextField' einbeziehen! – Rikh

Verwandte Themen