2014-11-12 7 views
3

iOS의 키보드 확장은 UIInputViewController 클래스의 하위 클래스이며 기본 문서와 상호 작용하는 속성이 textDocumentProxy입니다. textDocumentProxy 개체는 자동 대문자 사용 유형과 같은 문서의 중요한 특성을 나타냅니다. 문제는 기본 문서가 변경 될 때 키보드 확장이 어떻게 알 수 있습니까?키보드 프록시는 문서 프록시가 변경되었음을 어떻게 알 수 있습니까?

예를 들어 메시지 앱에서 새 메시지를 작성하려면 "수신자"필드가 메시지 본문 입력 상자와 다른 입력 특성을 사용합니다. 그러나 한 필드에서 다른 필드로 포커스를 전환 할 때 키보드가 사라지지 않기 때문에 텍스트 문서 프록시 객체가 즉시 변경됩니다. 키보드 확장이 그러한 변경을 알 수 있습니까?

KVO를 통해 textDocumentProxy[[self textDocumentProxy] autocapitalizationType] 속성을 모두 시청 해봤지만 작동하지 않습니다. 타이머를 사용하여 autocapitalizationType 속성을 확인하면 변경 내용이 표시되지만 분명히 폴링 솔루션을 피하고 싶습니다.

답변

4

UIInputViewControllerUITextInput 프로토콜 (textDidChange 방법 포함)을 지원합니다. textDidChange에서 self.textDocumentProxy과 내 self.currentTextProxy 속성을 비교합니다. 두 가지가 다른 경우 self.currentTextProxy을 업데이트 한 다음 self.textDocumentProxyUITextInputTraits을 기반으로 GUI를 새로 고칩니다.

+0

감사합니다. 나는 완전히'UITextInputDelegate'를 놓쳤다. – zoul

+0

이것은 iOS 10에서는 작동하지 않는 것처럼 보입니다. textDocumentProxy 메모리 주소가 변경되지 않는 것처럼 보입니다. 그리고 그것들은 뒤에서 입력 필드를 스와핑하고 있습니다. 여전히 작동하는 솔루션을 찾았습니까? –