OSX: NSButton с тегом не распознан

У меня есть NSButton внутри моей ячейки в NSTableView, и я хочу назначить ему действие и тег, чтобы иметь индекс, поэтому я сделал:

NSTableCellView *cellView = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    if( [tableColumn.identifier isEqualToString:@"check"] )
    {
        NSButton *button = (NSButton*)[cellView viewWithTag:100];

        if (button == nil)
            NSLog(@"button is null");
        [button setTag:row];
        [button setAction:@selector(SelectRow:)];
    }

}

- (IBAction)SelectRow:(id)sender{

    NSInteger index = [sender tag];

    NSLog(@"index:%lu", index);
}

Вы можете видеть, что у меня есть NSButton, начинающийся с тега = 100: я установил его в файле xib и изменил его на значение строки. Но у меня есть кнопка nil, потому что она входит в условие. В IOS это работает нормально, а в OSX нет... почему?


person cyclingIsBetter    schedule 06.10.2014    source источник


Ответы (1)


Если вам нужен только тег для получения правильного индекса строки, у меня может быть другое решение для вас. Мне также нужно было понять вид с нажатием кнопки. Вместо того, чтобы использовать теги, я просто попросил представление таблицы для индекса суперпредставления кнопок. Для меня это был лучший подход из-за изменения порядка ячеек.

- (IBAction)selectRow:(NSButton *)sender {
     NSInteger row = [_tableView rowForView:sender.superview];
     NSLog(@"index:%lu", index);
}

Надеюсь, я смог вам помочь!

person mangerlahn    schedule 06.10.2014
comment
Не используйте sender.superview, потому что рано или поздно он сломается (вы не владеете всеми представлениями в иерархии). Nasty - ищите правильный супервизор. Хорошо — создайте собственный подкласс, чтобы вам не нужен был тег или поиск по представлению. - person Wain; 06.10.2014