У меня есть NSTableView, который содержит мой пользовательский подкласс NSCell, IconCell.
IconCell содержит три элемента: изображение, текст и кнопку.
Вот упрощенная версия моего кода для рисования (closeButton
- кнопка):
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
{
NSPoint cellPoint = cellFrame.origin;
[controlView lockFocus];
CGFloat buttonWidth = [closeButton frame].size.width;
[someNSImage drawInRect:NSMakeRect(cellPoint.x, cellPoint.y, ICON_WIDTH, ICON_HEIGHT) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil];
[someNSString drawInRect:NSMakeRect(cellPoint.x+ICON_WIDTH+PADDING, cellPoint.y, cellFrame.size.width - ICON_WIDTH - buttonWidth, cellFrame.size.height) withAttributes:someTextAttributes];
[(NSButtonCell*)[closeButton cell] drawWithFrame:NSMakeRect(cellPoint.x + cellFrame.size.width - buttonWidth, cellPoint.y, buttonWidth, cellFrame.size.height) inView:controlView];
[controlView unlockFocus];
}
Чертеж работает нормально и производит что-то вроде следующего:
что я и хочу.
Более того, я хочу, чтобы одна из двух вещей происходила при взаимодействии пользователя с ячейкой: если пользователь щелкает в любом месте ячейки, ЗА ИСКЛЮЧЕНИЕМ кнопки закрытия, она должна выполнять actionA
. Если пользователь нажимает на кнопку закрытия, он должен сделать actionB
.
Проблема, с которой я столкнулся, заключается в том, что кнопка закрытия кажется «невидимой» - если я нажимаю на нее, она не перемещается (тогда как рабочая кнопка должна показывать свое нажатое состояние), и в целом она ведет себя как если его там не было, и вместо actionB
запускается actionA
.
Вот как я устанавливаю два действия:
[tableView setAction:@selector(actionA)];
и
[closeButton setAction:@selector(actionB)];
Что я делаю не так?