문제

나는 inputmethodkit을 사용하고 있으며 일부 텍스트 아래에 창을 배치하려고 합니다.

_currentClient는 IMKTextInput 사례

후보자는 IMKCandidates 사례

// Get the current location to place the window
NSRect tempRect = NSMakeRect(0, 0, 0, 0);
NSDictionary* clientData = [_currentClient attributesForCharacterIndex:0 lineHeightRectangle:&tempRect];
NSPoint* windowInsertionPoint = (NSPoint*)[clientData objectForKey:@"IMKBaseline"];
...
[candidates setCandidateFrameTopLeft:*windowInsertionPoint];
[candidates showCandidates];

이제 나는 windowInsertionPoint 변수는 괜찮습니다. 디버깅할 때 그 값을 볼 수 있습니다. 예:NS포인트:{647,365}

그런데 이것을 사용하면 후보 창이 화면 왼쪽 하단에만 표시됩니다.이전에 화면 배치 작업을 해본 적이 없으므로 도움을 주시면 감사하겠습니다.

임의의 정적 값을 전달하면 setCandidateFrameTopLeft, 화면에 배치됩니다.다음은 작동합니다:

[candidates setCandidateFrameTopLeft:NSMakePoint(401, 354)];

포인터 문제인가요?

도움이 되었습니까?

해결책

좋아, 이것에 대한 해결책은 내가 바보라는 것입니다.필요한 코드는 다음과 같습니다.

NSRect tempRect;
NSDictionary* clientData = [_currentClient attributesForCharacterIndex:0 lineHeightRectangle:&tempRect];
NSPoint windowInsertionPoint = NSMakePoint(NSMinX(tempRect), NSMinY(tempRect));

에 대한 문서 IMKTextInput 속성ForCharacterIndex 라고

lineRect:반환 시 선 높이와 함께 1픽셀 너비의 직사각형을 구성하는 직사각형입니다.이 직사각형의 방향은 선의 방향과 동일합니다.

이는 사용자가 전달한 변수에 NSRect를 반환한다는 의미입니다. lineHeightRectangle 값.중요한 점은 해당 NSRect의 위치가 검색하려는 캐릭터의 위치라는 것입니다.따라서 해당 직사각형에서 점을 만들고 Y 값에 NSMinY를 사용해야 합니다.직사각형의 너비는 단일 픽셀이므로 X의 최소/최대는 기본적으로 동일합니다.

다른 팁

아마도 이 문제는 더 이상 발생하지 않을 것입니다. 하지만 이 문제도 향후에는 가능합니다.

            [candidates show:kIMKLocateCandidatesBelowHint];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top