CheckBox в табличном виде - PullRequest
3 голосов
/ 20 июня 2009

У меня проблема с установкой флажков в UITableView. Я публикую здесь часть своего кода.

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    NSButtonCell *cell=[[NSButtonCell alloc] init];
    NSString *strDisplayPlaylistName;
    strDisplayPlaylistName=[playListNameArray objectAtIndex:row];
    [cell setTitle:strDisplayPlaylistName];
    [cell setAllowsMixedState:YES];
    [cell setButtonType:NSSwitchButton];
    return cell; 
}


- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {          
    NSCell *aCell = [aTableColumn dataCellForRow:rowIndex];
    [aCell setNextState];
    //NSCell *aCell=[aAddedCells objectAtIndex:rowIndex];
    //[aCell setNextState];
}

Я получил флажки внутри UITableView. Но проблема в том, что я не могу снять кнопки. Есть ли что-нибудь еще, чтобы сделать. Я новичок в программировании какао.

Ответы [ 3 ]

5 голосов
/ 21 июня 2009

Вам не хватает пары важных вещей. Вам необходимо обновить вашу модель (stcuture данных) в ответ на tableValue: setObjectValue: forTableColumn: row: message, чтобы вы могли правильно вернуть новое значение из tableView: objectValueForTableColumn: row: method.

Вот некоторые методы источника данных таблицы, предполагающие, что у вас есть массив 'myRows', заполненный объектами со свойством 'booleanAttribute'.

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return [myRows count];
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    BOOL value = [[myRows objectAtIndex:row] booleanAttribute];
    return [NSNumber numberWithInteger:(value ? NSOnState : NSOffState)];
}

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)value forTableColumn:(NSTableColumn *)column row:(NSInteger)row {          
    [[myRows objectAtIndex:row] setBooleanAttribute:[value booleanValue]];
}

Вы также должны настроить ячейку таблицы в конструкторе интерфейсов. Вы можете перетащить ячейку кнопки, настроенную как стандартный флажок, прямо на один из столбцов таблицы.

2 голосов
/ 25 октября 2012

Если для вашего режима содержимого NSTableView установлено значение «На основе ячеек», при перемещении флажка будет «Вид на основе».

2 голосов
/ 21 июня 2009

Я не уверен, почему вы создаете ячейку в коде. Вы можете просто перетащить ячейку в столбец таблицы в Интерфейсном Разработчике.

Кроме того, setObjectValue: где вы реагируете на изменение состояния ячейки. Пользователь уже изменил состояние ячейки на off; затем вы отправляете setNextState и меняете его обратно. Вот почему ячейка не снимается: вы продолжаете проверять ее.

То, что вам нужно сделать, это вообще не касаться ячейки, а установить значение объекта (которое для этого столбца, вероятно, будет логическим NSNumber, содержащим либо YES, либо NO) в качестве нового значения соответствующее свойство в вашей модели.

Также, конечно, убедитесь, что столбец установлен как редактируемый.

...