2012-11-15 2 views
3

CoreText를 사용하고 UITextInput 프로토콜을 준수하는 사용자 지정 UITextView (EGOTextView 기반)를 구현하고 있습니다. 하나의 성가신 것을 제외하고는 거의 모든 것이 잘 작동합니다 (휴!). 자동 고침 제안 텍스트가 세로로 미러링되고 강조 표시가 약간 오른쪽으로 이동합니다. 여기처럼 보이는 내용은 다음과 같습니다. "도움"나는 그것이로를 autocorrects하는 "HELO"입력 한 텍스트 필드에사용자 지정 텍스트 필드 - 미러 자동 고침

Mirrored autocorrection

보시다시피 자동 텍스트는 배경이 아닌 세로로 미러링됩니다. 또한 수평 적으로 7pt만큼 오른쪽으로 오프셋되어 있습니다.

두 번째 문제 (수평 오프셋)를 해결하기 위해 메서드가 올바른 CGRect을 반환한다는 것을 확인했습니다. 나는 이것을 두 가지 방법으로 해왔다. 첫 번째는 시각적으로 내가 UIMenuController을 표시 할 때 올바른 위치에 표시되는지 확인하는 것입니다. 두 번째는 CGRect 주위에 윤곽선을 그리고 firstRectForRange:이 반환합니다. 여기에는 CGRect과 동일한 텍스트가 나와 있습니다.

Outlined CGRect

당신이 볼 수 있듯이

가 올바른 영역이 설명되어 있지만, 자동 고침이 표시되어/잘못 강조했다.

모든 코드를 공유하게되어 기쁩니다. 그러나 거대한 클래스이고 지금은 꽤 어려워졌습니다. 모든 포인터가 크게 감사하겠습니다!

편집 : 소스 코드는 github.com/cbrauchli/EGOTextView의이 실험실 지점에서 사용할 수 있습니다.

+0

이 작업을 어떻게 수행하는지 모르므로 'UIKit'을 사용하면 도면의 원점이 왼쪽 상단에 있고 (y가 아래로 갈수록 증가 함) 유의하십시오. 그러나 더 낮은 수준의 드로잉 함수는 왼쪽 아래의 원점을 갖습니다 (y는 점점 커짐). 당신의 해법은 (1, -1)의 스케일 변환을 적용하여 y 축을 뒤집을 수 있습니다. – rmaddy

+0

@rmaddy, 감사합니다. 그게 분명히 생겼지 만, 어디서 잘못되었는지, 왜 내 코드가 자동 고침 뷰의 드로잉에 영향을 미칠지 알 수 없다. 나는 계속 나아가 편집에서 볼 수있는 github repo를 만들었습니다. – cbrauchli

답변

1

코드를하는 동안 나는 같은 동일한 문제에 직면 끄트머리 나는

- (UIView *)textInputView { 
    return _textContentView; 
} 

Apple documentation를 참조 구현 할 필요가 없다는 것을 발견 (이것은 일반적으로 UITextInput-채택 클래스의 인스턴스입니다.) 자세한 도움말 그 위에. 그리고이 메소드의 구현을 유지하려면 여기에서와 같이 return self을 입력하십시오. self (EGOTextView)은 UITextInput 채택 클래스의 인스턴스입니다.

나는 내 끝에 이것을 시도하고 잘 작동합니다.

1
@implementation EGOContentView 

@synthesize delegate=_delegate; 

- (id)initWithFrame:(CGRect)frame {...} 

이 추가 :

- (void)addSubview:(UIView *)view 
{ 
    if([view isKindOfClass:NSClassFromString(@"UIAutocorrectInlinePrompt")]) 
    { 
     view.layer.geometryFlipped = !view.layer.geometryFlipped; 
    } 
    [super addSubview:view]; 
} 

나는 그냥 추측 말할려고 해요 무엇. EGOTextView의 레이어의 지오메트리를 뒤집 으면 위 코드가 없어도 괜찮지 만 텍스트는 거꾸로되어 있습니다. 내 생각에 시스템이 뒤집혀 져서 EGOTextView의 레이어의 지오메트리를 검사하고이를 기반으로 UIAutocorrectInlinePrompt의 지오메트리를 조정하기 때문에 시스템이 "혼란스러워"(버그 일 수 있습니다)라고 생각합니다. 그러나 실제로 EGOContentView의 기하학은 EGOTextView가 아닌 ​​뒤집 혔고 UIAutocorrectInlinePrompt 뷰는 EGOContentView의 하위 뷰이지만 EGOContentView의 superview 레이어를 기반으로 "조정"되었기 때문에 거꾸로 끝납니다.

관련 문제