NSButton внутри NSTableView программно? - PullRequest
2 голосов
/ 01 апреля 2011

Как я могу установить столбец флажков внутри NSTableView?Пока это то, что я сделал, но он просто ставит int 1 в столбце, а не флажки:

-(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {
    if ([[tableColumn identifier] isEqualToString:@"Enable"]) {
        NSButtonCell *cell=[[[NSButtonCell alloc] init] autorelease];
        [cell setAllowsMixedState:YES];
        [cell setButtonType:NSSwitchButton];
        NSCell *aCell = [tableColumn dataCellForRow:row];
        [aCell setObjectValue:cell];
        return [NSNumber numberWithInt:1];
    }

    return [[data objectAtIndex:row+1] objectAtIndex:[[data objectAtIndex:0] indexOfObject:[tableColumn identifier]]];
}

Ответы [ 2 ]

10 голосов
/ 12 мая 2011

вам нужно использовать метод делегата dataCellForTableColumn.

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {

   if([[tableColumn identifier] isEqualTo:@"delete"]){

    NSButtonCell *cell = [[[NSButtonCell alloc] init] autorelease];
    [cell setAllowsMixedState:YES];
    [(NSButtonCell *)cell setButtonType:NSSwitchButton];
    [cell setTitle:@""];

    return cell;

   }else {
    NSCell *cell = [tableColumn dataCell];
    return cell;  
   }  
}
6 голосов
/ 01 апреля 2011

В Interface Builder перетащите ячейку флажка в столбец таблицы. Это установит ячейку данных для столбца. Настройте ячейку так, как вы хотите, в ее инспекторе. Затем удалите весь имеющийся у вас код, который действует в ячейке, и просто верните NSNumber.

В ответ на ваше желание сделать это программным путем: Интерфейсный Разработчик - действительно способ пойти сюда. Он предназначен для размещения объектов GUI. Я скажу вам, как это сделать.

Во-первых, вызов setObjectValue: для NSCell с другим NSCell, поскольку аргумент не преобразует первое во второе, не изменяет значения указателя или что-то в этом роде. Метод setObjectValue: изменяет objectValue ячейки - по сути, объект, который отображается в виде текста.

Если вы хотите программно предоставить ячейку для столбца таблицы, вам нужно будет вызвать -[NSTableColumn setDataCell:] с желаемым NSCell где-то (awakeFromNib, вероятно, будет хорошим выбором), но будьте осторожны, таблица В столбце повторно используется один и тот же экземпляр ячейки для каждой строки, и он просто изменяет его перед его отображением, чтобы он отображался правильно. Невозможно установить разные ячейки для каждой строки в столбце, ОБНОВЛЕНИЕ: без создания подкласса NSTableColumn .

...