質問

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];
.

今、私はDEBUGをデバッグするときにwindowInsertionPoint変数が大丈夫であることを知っています、例えば:nspoint:{647,365}

しかしこれを使用すると、候補ウィンドウは画面の左下隅に表示されます。私は以前のもののスクリーンの配置と働いていないので、助けが高く評価されています。

setCandidateFrameTopLeftに任意の静的値を渡すと、画面に配置されます。以下の作品:

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

ポインタ問題は?

役に立ちましたか?

解決

OK、これへの解決策は私が馬鹿であるということです。これが必要なコードです:

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

IMKTextInput AttributesForCharacterIndex

Linerect:returnでは、ラインの高さを持つ1ピクセル幅の矩形をフレームにする長方形。この長方形は、線が向きを置いているのと同じ方法です。

これは、lineHeightRectangle値の渡した変数へのNSRECTを返すことを意味します。重要な点は、そのNSRECTの場所が検索している文字の場所であることです。それで、あなたはその長方形からポイントを作り、y値のためにnsminyを使う必要があります。四角形は単一のピクセルだけであるため、Xの最小/最大は基本的に同じです。

他のヒント

あなたはおそらくもうこの問題を持っていませんが、これは将来のためにも機能します:

            [candidates show:kIMKLocateCandidatesBelowHint];
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top