4

私のアプリでは、NSTextView でポップオーバーを表示したいので、NSTextView で選択した四角形の座標を画面座標に変換する必要があります。私はこのコードを試しました:

NSWindow* viewWindow = [self window];
NSRect rect = [self firstRectForCharacterRange:[self selectedRange]];
rect = [[self superview] convertRect:rect toView:nil]; //converting to NSClipView coordinate system
rect = [viewWindow convertRectToScreen:rect];
return rect;

ほぼ問題なく動作しますが、返された rect は "x" によって非常に "壊れた" 原点を持っています。たとえば、rect.origin.x最初が 670 の場合、最後は 1022 になります。

何か案は?

ありがとう。

4

1 に答える 1

4

わかった。

- (NSRect)rectForPopover
{    
    NSRect rect = [self firstRectForCharacterRange:[self selectedRange]];
    NSRect txtViewBounds = [self convertRectToBacking:[self bounds]];
    txtViewBounds = [self.window convertRectToScreen:txtViewBounds];

    rect = [[self superview] convertRect:rect toView:nil];
    rect = [self.window convertRectToScreen:rect];

    rect.origin = NSMakePoint(rect.origin.x - txtViewBounds.origin.x - self.window.frame.origin.x, rect.origin.y);

    return rect;
}
于 2012-06-19T13:14:17.590 に答える