在Cocoa的文本编辑控件中获取当前插入符位置的窗口坐标的最佳方法是什么?
以下是我在其他平台上的表现方式
EM_POSFROMCHAR
gtk_text_view_get_iter_location
和gtk_text_view_buffer_to_window_coords
。我想知道如何使用Cocoa完成同样的工作。我使用的是MacOSX 10.6.8,我使用的是C ++。
答案 0 :(得分:5)
假设textView
是指向文本视图的变量,window
是指向窗口的变量:
// -firstRectForCharacterRange:actualRange returns a frame rectangle
// containing the insertion point or, in case there's a selection,
// the first line of that selection. The origin of the frame rectangle is
// in screen coordinates
NSRange range = [textView selectedRange];
NSRect screenRect = [textView firstRectForCharacterRange:range actualRange:NULL];
// -convertRectFromScreen: converts from screen coordinates
// to window coordinates
NSRect windowRect = [window convertRectFromScreen:screenRect];
// The origin is the lower left corner of the frame rectangle
// containing the insertion point
NSPoint insertionPoint = windowRect.origin;
答案 1 :(得分:1)
以下方法在文档
中 - (void)drawInsertionPointInRect:(NSRect)aRect color:(NSColor *)aColor turnedOn:(BOOL)flag
它说
调用此方法时,焦点必须锁定在接收器上。您不应该直接调用此方法。
如果在NSTextView子类中重写此方法(并调用超级实现),它将允许您知道插入点的位置,至少在Cocoa需要时。