2016-11-10 4 views
0

У меня есть loginView, внутри которого есть два текстовых поля и кнопка. Я должен перемещаться вверх по виду, нажимая на textField и перемещаясь вниз по виду, когда нажимаем клавишу возврата.Клавиатура перемещается вверх и вниз

Моя проблема заключается в том, что она работает нормально для всех условий, но при нажатии на одно текстовое изображение открывается вверх, но в то же время, когда мы идем для следующего вида textField, он перемещается вниз.

import UIKit 
class CheckFontIconView: UIViewController,UITextFieldDelegate { 

    var activeField: UITextField? 

    @IBOutlet weak var loginFieldsView: UIView! 

    @IBOutlet weak var label: UILabel! 
    @IBOutlet weak var mobileNo: UITextField! 
    @IBOutlet weak var textFieldPassword: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     mobileNo.delegate = self 
     textFieldPassword.delegate = self 

     registerForKeyboardNotifications() 
    } 

    @IBAction func btnLoginAction(_ sender: Any) { 

    } 

    deinit { 

     //NotificationCenter.default.removeObserver(self) 
     self.deregisterFromKeyboardNotifications() 
    } 


    func registerForKeyboardNotifications() { 

     //Adding notifies on keyboard appearing 
     NotificationCenter.default.addObserver(self, selector: #selector(keyboardWasShown(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillBeHidden(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 

    func deregisterFromKeyboardNotifications() { 

     //Removing notifies on keyboard appearing 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 

    func keyboardWasShown(notification: NSNotification) { 

     //Need to calculate keyboard exact size due to Apple suggestions 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     if self.activeField != nil { 
      self.loginFieldsView.frame.origin.y -= (keyboardSize?.height)! 
     } 
    } 

    func keyboardWillBeHidden(notification: NSNotification) { 

     //Once keyboard disappears, restore original positions 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     self.loginFieldsView.frame.origin.y -= (keyboardSize?.height)! 
     self.loginFieldsView.endEditing(true) 
    } 

    func textFieldDidBeginEditing(_ textField: UITextField) { 
     self.activeField = textField 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     self.activeField = nil 

    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     activeField?.resignFirstResponder() 
     return true 
    } 
} 
+0

Самый простой способ - указать флаг, обозначающий вашу клавиатуру. Поэтому обрабатывайте его в случае, если он не отображается, или случай переместится на следующий текстовый элемент. – nynohu

+0

Да, я пробовал то же самое, что раньше устанавливал флаг, но такая же проблема возникала. – kishor0011

+0

Если вы будете использовать UIScrollView в своем браузере, вы можете исправить ошибку. –

ответ

0

Спасибо за задать вопрос ...

Использование TPKeyboard для того чтобы достигнуть выше функциональности, то не управлять такого рода вещи (автоматическое управление с помощью TPKeyboard) ...

Update:

Я думаю, что вы допустили ошибку в приведенном ниже кодексе ...

func textFieldDidEndEditing(_ textField: UITextField) { 
     self.activeField = nil 
} 

Вы должны DEBUG и определить точный вопрос ..

Счастливого кодирование ...

+0

Я не хочу использовать любую библиотеку. – kishor0011

+0

Я ДЕБЮГ, но не получаю проблемы. – kishor0011

+0

Можете ли вы поделиться демо-проектом со мной ... – iMHitesh

1

После попробовать с Scrollview, я надеюсь, что это поможет.

Используйте прокрутку, чтобы перемещать текстовое поле вверх и вниз.

Наверстывая

  1. Сделать @IBOutlet слабый уаг скроллер: UIScrollView !;
  2. Под textFieldDidBeginEditing: метод TextField
  3. Создать CGPoint с й: 0 и у texfield.frame.origin.y
  4. А затем начать движение скроллера с setContentOffset:. Анимированные функциями (параметр будет ваш CGPoint и boolean value true).

Создание вниз

  1. Под textFieldDidEndEditing: TextField установить скроллер в CGPoint.zero с таким же setContentOffset: анимированные функции.

* И ваш текстFieldShouldReturn: textField должен быть resignFirstResponder или к следующему текстовому полю.

Пожалуйста, дайте мне знать, если у вас возникли проблемы с этим.

+0

Но у меня есть только два текстовых поля, почему я должен использовать scrollView. Спасибо – kishor0011

+0

Ваша забота правильная, но так или иначе, вы хотите переместить вид вправо? Если вы используете scrollView, это поможет вам прокручивать вверх и вниз в соответствии с движением клавиатуры. –

0

Я сделал простой код для вашей проблемы. Это не хорошо, но вы можете сослаться на эту идею, чтобы исправить вашу проблему.

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    var activeField: UITextField? 

    @IBOutlet weak var loginFieldsView: UIView! 

    @IBOutlet weak var label: UILabel! 
    @IBOutlet weak var mobileNo: UITextField! 
    @IBOutlet weak var textFieldPassword: UITextField! 
    var originalHeight:CGFloat! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     mobileNo.delegate = self 
     textFieldPassword.delegate = self 
     originalHeight = self.loginFieldsView.frame.origin.y 

     registerForKeyboardNotifications() 
    } 

    @IBAction func btnLoginAction(_ sender: Any) { 

    } 

    deinit { 

     //NotificationCenter.default.removeObserver(self) 
     self.deregisterFromKeyboardNotifications() 
    } 


    func registerForKeyboardNotifications() { 

     //Adding notifies on keyboard appearing 
     NotificationCenter.default.addObserver(self, selector: #selector(keyboardWasShown(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillBeHidden(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 

    func deregisterFromKeyboardNotifications() { 

     //Removing notifies on keyboard appearing 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
    } 

    func keyboardWasShown(notification: NSNotification) { 

     //Need to calculate keyboard exact size due to Apple suggestions 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     if self.activeField != nil { 
      if self.loginFieldsView.frame.origin.y == originalHeight { 
       self.loginFieldsView.frame.origin.y -= (keyboardSize?.height)! 
      } 
     } 
    } 

    func keyboardWillBeHidden(notification: NSNotification) { 

     //Once keyboard disappears, restore original positions 
     var info = notification.userInfo! 
     let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
     if originalHeight > self.loginFieldsView.frame.origin.y { 
      self.loginFieldsView.frame.origin.y += (keyboardSize?.height)! 
     } 
     self.loginFieldsView.endEditing(true) 
    } 

    func textFieldDidBeginEditing(_ textField: UITextField) { 
     self.activeField = textField 
    } 

    func textFieldDidEndEditing(_ textField: UITextField) { 
     self.activeField = nil 

    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     activeField?.resignFirstResponder() 
     return true 
    } 
} 
+0

@ kishor0011 Я только что отредактировал свой ответ. Пожалуйста, проверь это. – nynohu

+0

Что я пробовал, но не решил свою проблему. В этом представлении выходит из viewController. Спасибо – kishor0011

+0

Пожалуйста, замените на новый код, который я разместил. Я тестировал, и это сработало. – nynohu

0

Только одно изменение удерживает просмотр старого кадра в переменной и присваивает его снова вашему виду, когда клавиатура исчезает.

import UIKit 
    class CheckFontIconView: UIViewController,UITextFieldDelegate { 

var activeField: UITextField? 

@IBOutlet weak var loginFieldsView: UIView! 

@IBOutlet weak var label: UILabel! 
@IBOutlet weak var mobileNo: UITextField! 
@IBOutlet weak var textFieldPassword: UITextField! 
var previousFrame : CGRect! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    previousFrame=self.loginFieldsView.frame 

    mobileNo.delegate = self 
    textFieldPassword.delegate = self 

    registerForKeyboardNotifications() 
} 

func keyboardWasShown(notification: NSNotification) { 

    //Need to calculate keyboard exact size due to Apple suggestions 
    var info = notification.userInfo! 
    let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size 
    if self.activeField != nil { 
     self.loginFieldsView.frame.origin.y = previousFrame.origin.y-(keyboardSize?.height)! 
    } 
} 

func keyboardWillBeHidden(notification: NSNotification) { 

    //Once keyboard disappears, restore original positions 
    /*var info = notification.userInfo! 
    let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size*/ 
    self.loginFieldsView.frame = previousFrame 
    //self.loginFieldsView.endEditing(true) 
} 

func textFieldDidBeginEditing(_ textField: UITextField) { 
    self.activeField = textField 
} 

func textFieldDidEndEditing(_ textField: UITextField) { 
    self.activeField = nil 

} 

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    activeField?.resignFirstResponder() 
    return true 
} 
} 
+0

Хорошо, я проверю его и дам вам знать. Спасибо – kishor0011

+0

Пожалуйста, проверьте вопрос Пока self.loginFieldsView перемещается вверх, а затем коснитесь обоих текстовых полей. Проблема, о которой вы узнаете. – kishor0011

+0

@ kishor0011 вы можете показать свой снимок экрана, чтобы я мог лучше понять, как вид перемещается вверх? –

 Смежные вопросы

  • Нет связанных вопросов^_^