2017-05-19 6 views
-2

하위보기 안에 두 개의 텍스트 필드가 있고 하위보기 및 키보드 안에 클릭 한 텍스트 필드 중 하나가 클릭되면 하위보기를 이동하려고합니다. 문제는 하위 뷰가 올라와서 두 번째 텍스트 필드를 클릭 할 때 하위 뷰가 아래로 이동한다는 것입니다. 텍스트 필드를 제외한보기를 터치하면 숨겨집니다.키보드가 하위보기의 텍스트 필드 위에 표시 될 때 하위보기 이동

내 두 텍스트 필드 및 하위 뷰의 정의입니다.

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

있는 viewDidLoad의 코드

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

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

그리고 보여 다른 두 기능 및 숨기기 키보드

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 
     } 

    } 
} 
나는 동안이 텍스트 필드를 클릭 할 때 내가 하위 뷰를 피할 수있는 방법을 알고 싶습니다

하위보기가 작동합니다.

답변

0

키보드가 내려 갔을 때보기의 y- 원점을 0으로 만드십시오. 키보드가 열려있는 동안 다른 textField를 탭하면됩니다. FUNC keyboardWillHide (알림 : 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

내가 self.view의 상단까지의 서브 뷰를 이동하지 않으려는, 그냥 키보드 높이만큼 서브 뷰를 이동하려는. 그리고 고맙지 만 내 제안과 마찬가지로 예상대로 귀하의 제안이 작동하지 않았습니다. – mehmeet43

+0

내 코드는 키보드 높이에 따라 뷰를 위로 이동합니다. 기본적으로 키보드의 y- 원점은 0이 될 것이고 키보드가 오면 높이가 100이라고 가정 해 보겠습니다. 그러면 뷰가 -100 y- 원점에 있어야하므로 내 코드가됩니다. 내 코드는 마지막 원점이 무엇이든 관계없이 위의 점을 100 포인트 위로 이동합니다. 하지만 당신은 이전 y 위치에서 100 포인트를 위로 이동시키기 위해 시야를 위로 움직이고있었습니다. 그래서 그냥 + = (- 높이)를 빼면 y를 빼지 않고 y 값을 무효화합니다. –