如何从我的NSTableCellView中删除NSTableCellView(或它的一个子类)?
当我清空保存信息的数组时,将DB排队以获取新信息,然后重新加载表数据,它只会用与新数组列表中类似的索引值更新单元格。
例如。
我首先在数组中有8个对象,它们显示得很好。当我更新我的数组而现在只有3个时,表中的前三个单元格将被更新,而最后5个单元格仍然是旧的。旧的不是可选的,只有可见的。我怀疑我错过了一些重画/重划..。
我在TableView上试过TableView,但还没有运气。
我正在使用ARC、Xcode 4.6.1和OSX10.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;
}发布于 2013-03-25 22:36:12
您必须将NSTableView告诉reloadData (听起来您正在这么做)。当您这样做时,数据源的工作就是知道现在只有3行,并在numberOfRowsInTableView:中给出这个答案(听起来您没有这样做)。你没有显示任何代码(为什么不?)当然,所有这些都是完全猜测的。
发布于 2013-03-26 12:52:01
使用
[tableView removeRowsAtIndexSet:indexSet withAnimation:YES];发布于 2014-04-26 12:04:06
您可以使用以下示例(清除/刷新/重绘) 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;
}https://stackoverflow.com/questions/15624848
复制相似问题