使用基于视图的NSTableView
时,如何更改所选行的视图?具体来说,我想为未选择的行创建一个简单的NSView子类,为所选行创建一个更复杂的NSView子类,它允许编辑与行项相关的更多信息。
一个例子是Things允许您展开正在编辑的项目的方式,如下所示:http://culturedcode.com/things/
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
如果您通过“将视图更改为更复杂的视图”详细阐述了您的意思,那可能会更好。
但是,您可以在表视图的委托中实现- (void)tableViewSelectionDidChange:(NSNotification *)notification
,如果可见,则获取所选的NSTableRowView
,并以您希望的方式更改它,包括制作它更复杂,扩展它(见下文)等。
要修改行的大小,您需要在同一个委托中实现- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
,并调用表格视图的-noteHeightOfRowsWithIndexesChanged
来更新特定行的高度。
答案 2 :(得分:0)
我认为应用程序是由NSOutlineView
在outlineview中创建的,只有您可以轻松扩展所选行...
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
if ([item isKindOfClass:[NSDictionary class]])
{
return YES;
}else
{
return NO;
}
}
我认为这种方式是写的..