2012-04-09 3 views
2

Как изменить представление для выбранной строки при использовании основанного на представлении NSTableView? В частности, я хотел бы иметь простой подкласс NSView для невыбранных строк и более сложный подкласс NSView для выбранной строки, который позволяет редактировать дополнительную информацию, связанную с элементом строки.Изменение вида для выбранного в представлении NSTableView

Примером может служить положение вещей позволяет расширить пункт редактируется, как показано здесь: http://culturedcode.com/things/

ответ

1

Это может быть хорошо, если вы подробно немного больше о том, что вы имеете в виду под «изменить взгляд на более комплекс вид»

Тем не менее, вы могли бы, например, осуществлять - (void)tableViewSelectionDidChange:(NSNotification *)notification в делегатом виде таблицы, получить выбранный NSTableRowView если она видна, и изменить его, каким образом вы хотите, которая включает в себя, что делает его более сложным, расширение (см. ниже) и т. д.

К m одинажите размер строки, вам нужно будет реализовать - (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row в том же делетете и вызвать -noteHeightOfRowsWithIndexesChanged таблицы для обновления высоты для определенных строк.

3

Я предполагаю, что вы хотите использовать другой подкласс NSTableCellView при выборе строки. Я думаю, вы должны быть в состоянии сделать что-то вроде этого:

- (void)tableViewSelectionDidChange:(NSNotification *)notification 
{ 
    NSTableView *table = [notification object]; 
    NSIndexSet *allColumns = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [[table tableColumns] count])]; 
    [table reloadDataForRowIndexes:[table selectedRowIndexes] columnIndexes:allColumns]; 
} 

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 
{ 
    if ([[tableView selectedRowIndexes] containsIndex:row]) 
    { 
     // If the row is selected, return an instance of the class for selected views 
     SelectedTableCellView *selectedView = ...; // Get from makeViewWithIdentifier: 
     // Set up selectedView 
     return selectedView; 
    } 
    else 
    { 
     NonSelectedTableCellView *nonSelectedView = ...; // Get from makeViewWithIdentifier: 
     // Set up nonSelectedView 
     return nonSelectedView; 
    } 
} 
+0

Будет ли это работать, если NSTableView реализован с помощью Cocoa Bindings? – Kaunteya

0

Я думаю, что приложение создано NSOutlineView в outlineview только вы можете легко расширить выбранную строку ...

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item 
{   


    if ([item isKindOfClass:[NSDictionary class]]) 
    { 
     return YES;   
    }else 
    { 
     return NO; 
    } 
} 

Я думаю, что это way is write ..

Смежные вопросы