в моем приложении какао мне нужен пользовательский NSCell для NSTableView. Этот подкласс NSCell содержит настраиваемую NSButtonCell для обработки щелчка (и два или три элемента NSTextFieldCell для текстового содержимого). Ниже вы найдете упрощенный пример моего кода.
@implementation TheCustomCell
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
// various NSTextFieldCells
NSTextFieldCell *titleCell = [[NSTextFieldCell alloc] init];
....
// my custom NSButtonCell
MyButtonCell *warningCell = [[MyButtonCell alloc] init];
[warningCell setTarget:self];
[warningCell setAction:@selector(testButton:)];
[warningCell drawWithFrame:buttonRect inView:controlView];
}
Проблема, с которой я застрял, заключается в следующем: каков наилучший / правильный способ заставить эту кнопку (точнее: NSButtonCell) внутри этого NSCell работать должным образом? "работа" означает: запуск назначенного действия сообщение и отображать альтернативное изображение при нажатии. По умолчанию кнопка при нажатии ничего не делает.
Информацию / литературу по этой теме найти сложно. Единственные сообщения, которые я нашел в сети, указали мне на реализацию
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)untilMouseUp;
Это правильный способ сделать это ??? Реализовать trackMouse: в моем содержащем NSCell? А затем перенаправить событие в NSButtonCell? Я ожидал, что NSButtonCell сам знает, что делать, когда по нему щелкают (и я видел trackMouse: методы, которые больше связаны с реальным отслеживанием движений мыши, а не как обучающее колесо для «стандартного» поведения щелчка). Но похоже, что он не делает этого, когда включен в саму ячейку ... Кажется, я еще не понял общей картины пользовательских ячеек ;-)
Я был бы рад, если бы кто-нибудь мог ответить на этот вопрос (или указать мне на какой-нибудь учебник или что-то подобное) исходя из своего собственного опыта - и сказать мне, на правильном ли я пути.
Заранее спасибо, Тоби