Вы можете позвонить [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];