2016-07-09 5 views
1

Я работаю над App, у которого есть комментарии и пользователи, и мне нужно, чтобы пользователь вставлял комментарий в табличный вид, проблема, с которой я столкнулся, касается клавиатуры, где ее, когда пользователь нажимает текст поле, чтобы написать комментарий, который появляется на клавиатуре, и текстовое поле выходит за него как код ниже.TextFiled over the Keyboard issue

Но проблема в том, что я меняю язык клавиатуры, меняю клавиатуру на Emoji или открываю автокорректное текстовое поле и не перемещаюсь с раскладкой клавиатуры.

override func viewWillAppear(animated: Bool) { 

    super.viewWillAppear(animated) 

    // KeyBoard Show and Hide 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(Commants_Page.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object:nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(Commants_Page.keyboardWillHide(_:)), name: UIKeyboardWillHideNotification, object: nil) 


    NSNotificationCenter.defaultCenter().addObserver(self,selector: #selector(Commants_Page.adjustForKeyboard(_:)),name: UIKeyboardWillChangeFrameNotification,object: nil) 

} 


// KeyBoard Show and Hide Function 

func keyboardWillShow(notification: NSNotification) { 

    if KeyBoardMove == false { 

     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { 
      self.view.frame.origin.y -= keyboardSize.height 

      KeyBoardMove = true 
     } 
    } 
} 

func keyboardWillHide(notification: NSNotification) { 

    if KeyBoardMove == true { 

     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() { 
      self.view.frame.origin.y += keyboardSize.height 

      KeyBoardMove = false 
     } 
    } 
} 

Screenshot

ответ

0

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

То, что я сделал это:

  1. Добавить UITextInputCurrentInputModeDidChangeNotification уведомления viewWillAppear
  2. Реализовать changeInputMode метод для определения типа клавиатуры
  3. Ручки keyboardWillShow и keyboardWillHide

    var isEmoji = Bool() 
    
    override func viewWillAppear(animated: Bool) { 
    
    super.viewWillAppear(animated) 
    
    isEmoji = false 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "changeInputMode:", name:UITextInputCurrentInputModeDidChangeNotification, object: nil) 
    
    } 
    
    func changeInputMode(notification : NSNotification) 
    { 
        //Emoji keyboard does not have any primary language whereas normal text keyboard does have. Therefore, on the bases of it we can determine the keyboard type 
    
        if let lang = txtComment.textInputMode?.primaryLanguage 
        { 
         isEmoji = false 
        } 
        else{ 
         isEmoji = true 
        } 
    } 
    
    func keyboardWillShow(notification: NSNotification) { 
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue() { 
         print(isEmoji) 
         if(!isEmoji){     
    
          writeCommentView.frame.origin.y -= keyboardSize.height 
         } 
         else{ 
          writeCommentView.frame.origin.y -= 37 //where 37 is the height differece between normal keyboard and emoji keyboard. Change this value accordingly 
         } 
    
    
        } 
    } 
    
    func keyboardWillHide(notification: NSNotification) { 
        if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() { 
         //Handle this method accordingly. For example.. 
         if(!isEmoji){     
    
          writeCommentView.frame.origin.y += keyboardSize.height 
         } 
         else{ 
          writeCommentView.frame.origin.y += 37 
         } 
        } 
    } 
    

    Надеются, что это поможет.

+0

Благодаря его мне помогли, но в отводящих путях, но до сих пор его не идеальный способ, потому что, когда пользователь откроет прогнозный вариант Текст подается исчезает –

+0

Тогда существует множество библиотек, доступные, которые могут себе это позволить. Вы можете взглянуть на https://github.com/michaeltyson/TPKeyboardAvoiding – iRiziya

+0

благодаря iRiziya, я проверю его –