Координаты NSTextFieldCell - PullRequest
2 голосов
/ 28 мая 2009

Я пытаюсь получить координаты NSPoint элемента NSTextFieldCell, но NSTextFieldCell не наследуется от NSView и поэтому не имеет метода фрейма. Есть идеи как обойти это?

Я пытаюсь использовать MAAttachedWindow Мэтта Геммеля, чтобы прикрепить маленькие всплывающие подсказки к определенным элементам. Я хочу прикрепить его к области в окне, и, кроме того, что взломать его вместе, вручную связавшись с координатами x и y, я не уверен, как получить координаты.

Ответы [ 4 ]

3 голосов
/ 28 мая 2009

Вы можете позвонить [theCell controlView], чтобы получить ссылку на элемент управления, которому принадлежит определенная ячейка. Если объект NSTextFieldCell является частью простого элемента управления, такого как NSTextField, должно быть достаточно следующего:

NSRect cellFrame = [[theCell controlView] frame];
NSPoint origin = cellFrame.origin;
//..

Если, однако, NSTextFieldCell является частью более сложного элемента управления, такого как NSTableView, где одна ячейка используется в нескольких местах, вам потребуется дополнительная информация для определения правильного прямоугольника. NSCell предлагает метод representedObject, который может помочь вам определить , какой объект в NSTableView представлен ячейкой в ​​данный конкретный момент. Не зная больше о вашем конкретном случае, я не знаю, сколько подробностей предоставить в этом отношении.

Вот одно из возможных решений, при условии, что вы можете отличить информацию о строках и столбцах от объекта, хранящегося в representedObject:

NSTableView * tableView = [theCell controlView];
id cellObject = [theCell representedObject];

NSInteger row = //... determine from representedObject
NSInteger col = //... determine from representedObject

NSRect cellFrame = [tableView frameOfCellAtColumn:col row:row];
2 голосов
/ 28 мая 2009

Для использования MAAttachedWindow, вы могли бы вместо этого использовать кадр элемента управления (если это элемент управления с одной ячейкой), или в случае табличного представления с определенной строкой один из методов макета NSTableView? rectOfRow: или rectOfColumn:, например. Вы можете переопределить NSTextFieldCell и расположить окно в одном из методов рисования, но я бы сохранил это для моего абсолютного последнего выбора, если это возможно.

2 голосов
/ 28 мая 2009

Ячейка - это объект многократного использования, принадлежащий NSControl (подкласс NSView). У него нет исходной точки, потому что он на самом деле не представляет место на экране, это зависит от элемента управления (который имеет определенный прямоугольник рамки), чтобы нарисовать его где и когда это необходимо. Подумайте, например, о табличном представлении: оно может использовать одну ячейку, которая перерисовывается в нескольких местах для каждой строки.

Элемент пропускает прямоугольник кадра элементом управления, когда он рисуется на экране, в большинстве случаев это все, что вам нужно. Вы также можете воспользоваться методами определения размеров NSCell, которые могут подсказать, сколько места нужно для отображения своего контента.

1 голос
/ 28 мая 2009

У него нет координат. Там нет ничего, чтобы получить. Работа ячеек заключается в том, что представление сообщает ячейке « рисовать здесь ».

Итак, если вы не используете один из методов рисования ячейки и вам действительно очень нужны координаты, вам нужно спросить представление, которому принадлежит ячейка. Обычно это [cell controlView].

(Возможно, вы думаете об UIKit? UITableViewCells сильно отличаются от NSCells.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...