Как я могу добавить подкласс в NSTableCellView?

Я добавляю представление ячейки таблицы изображений и текста в NSTable в IB. В представлении ячейки текстовой таблицы есть TextFiled и ImageView, поэтому мой код выглядит так:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    NSString *iden = [ tableColumn identifier ];
    if ([iden isEqualToString:@"MainCell"]) {
        NSTableCellView *cell = [ tableView makeViewWithIdentifier:@"MainCell11" owner:self ];
        [cell.textField setStringValue:@"123"];
        [cell.imageView setImage:[[NSImage alloc] initByReferencingFile:@"/Users/Pon/Pictures/17880.jpg"]];
        return cell;
    }
    return nil; 
}

Я обнаружил, что textfield и imageView имеют выход по умолчанию, поэтому я могу использовать cell.textFiled, чтобы посетить этот объект textField и изменить его значение. Вот мой вопрос: если я добавлю дополнительный TextField к этому представлению ячейки изображения и текстовой таблицы, в одном столбце будет два TextField, так как я могу получить второй TextFiled, который я добавил, изменив значение TextFiled?

1 ответ

Решение

Как сказано на странице справки по классам NSTableCellView

Дополнительные свойства можно добавить, создав подкласс NSTableCellView и добавив необходимые свойства и подключив их программно или в Интерфейсном Разработчике.

Создайте свой подкласс NSTableCellView (скажем, "CustomTableCellView"), определите дополнительное свойство вывода текстового поля (представление изображения и первое текстовое поле определены в суперклассе). Установите класс прототипа вашей ячейки в Интерфейсном Разработчике и подключите дополнительный элемент управления текстового поля к вашему свойству.

В вашем классе NSTableViewDelegate:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
    NSString *iden = [ tableColumn identifier ];
    if ([iden isEqualToString:@"MainCell"]) {
        CustomTableCellView *cell = [ tableView makeViewWithIdentifier:@"MainCell11" owner:nil ]; // use custom cell view class
        [cell.textField setStringValue:@"123"];
        [cell.imageView setImage:[[NSImage alloc] initByReferencingFile:@"/Users/Pon/Pictures/17880.jpg"]];
        [cell.addinitionalField setStringValue:@"321"]; // that is all
        return cell;
    }
    return nil; 
}
Другие вопросы по тегам