如何从NSTableView中删除NSTableCellView(或其子类)?
当我清空我的数组保存信息,队列数据库获取新信息然后重新加载表数据时,它只更新索引值类似于新数组列表中的索引值。
离。
我首先在我的数组中有8个对象,它们显示正常。当我更新我的阵列并且现在只有3时,表中的前三个单元格会更新,而后五个单元格仍然是旧的。旧的不可选择但只能看到。我怀疑我想念一些重绘/ dealloc ..
我在TableView上尝试了setNeedsDisplay,但还没有运气。
我正在使用ARC,Xcode 4.6.1和OS X 10.8.3
示例代码
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return [_array count];
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
[_tableView setNeedsDisplay];
NSDictionary *d = [_array objectAtIndex:row];
NSString *identifier = [tableColumn identifier];
if ([identifier isEqualToString:@"MainCell"]) {
CustomCellView *cellView = [tableView makeViewWithIdentifier:@"MainCell" owner:self];
[cellView.textField setStringValue:d[@"from"]];
[cellView.subject setStringValue:d[@"subject"]];
[cellView.text setStringValue:d[@"text"]];
[cellView.date setStringValue:d[@"date"]];
return cellView;
}
return nil;
}
答案 0 :(得分:1)
你必须告诉NSTableView reloadData
(听起来你正在这样做)。当你这样做时,数据源的工作就是知道现在只有3行,并在numberOfRowsInTableView:
中给出答案(听起来你没有这样做)。你没有显示任何代码(为什么不呢?)所以当然所有这些都是猜测。
答案 1 :(得分:0)
使用
[tableView removeRowsAtIndexSet:indexSet withAnimation:YES];
答案 2 :(得分:0)
您可以使用此示例(清除/刷新/重绘)您的cellView:
在此示例中,“mainTable”是您表的NSTableView *。
- (NSView *)tableView:(NSTableView *)aTableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSString* identifier = [tableColumn identifier];
NSTableCellView* cellView = [[NSTableCellView new] initWithFrame:[[mainTable makeViewWithIdentifier:identifier owner:self] frame]];
[cellView drawRect:[[mainTable makeViewWithIdentifier:identifier owner:self] frame]];
cellView = [mainTable makeViewWithIdentifier:identifier owner:self];
// do something with your cellView here ...
return cellView;
}