2017-01-19 3 views
0

현재 여러 개의 텍스트 필드와 2 개의 텍스트보기가 포함 된 앱을 하나의 스크롤보기에서 작업하고 있습니다. 키보드가 나타나면 필드를 숨길 수 없도록 스크롤 뷰의 내용 삽입을 변경할 수있었습니다. 내가 겪고있는 문제는 하드 코딩 된 하나의 필드에서만 작동하도록 할 수 있다는 것입니다. 하나를 선택하고 그것에 애니메이션을 적용해야합니다. 어쨌든 keyboardWillShow에 보낸 사람 필드 또는 텍스트보기를 가져 오나요? 현재, 나는 이것을 사용하고 언급 한 것 이외에는 모든 것이 작동하는데 하나의 필드 detailsTxtView을 선택하고 그것에 애니메이션을 적용해야했습니다. 어떤 도움이 필요합니까?알림 센터의 발신자 표시 키보드가 표시됩니다.

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

func keyboardWillShow(notification: NSNotification) { 
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
     let contentInsets: UIEdgeInsets? = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0) 
     scrollView.contentInset = contentInsets! 
     scrollView.scrollIndicatorInsets = contentInsets! 
     let goto = CGPoint(x: CGFloat(0.0), y: CGFloat(detailsTxtView.frame.origin.y + (keyboardSize.height + 40))) 
     scrollView.setContentOffset(goto, animated: true) 
    } 

} 

답변

1

아이폰 OS에서 당신은 UIResponder.isFirstResponder와 키보드 포커스를 (모든 UIViews는 UIResponder에서 상속 모든보기에 그래서 그 속성에주의)가 누구인지 알 수 있습니다. isFirstResponder = true 인 필드를 확인하고 해당 필드로 스크롤하십시오. 당신이 그것들을 많이 가지고 있다면 당신의 모든 필드를 콘센트 컬렉션에 넣는 것이 유용합니다. 그래서 당신은 단지 그것들을 반복하고 어느 것이 FirstResponder인지 알아낼 수 있습니다.

+0

감사합니다. 나는 미래의 많은 프로젝트에서 그 지식을 활용할 것이다. – user1881482