删除NSTableCellView

时间:2013-03-25 21:11:25

标签: objective-c cocoa nstableview nstablecellview

如何从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;
}

3 个答案:

答案 0 :(得分:1)

你必须告诉NSTableView reloadData(听起来你正在这样做)。当你这样做时,数据源的工作就是知道现在只有3行,并在numberOfRowsInTableView:中给出答案(听起来你没有这样做)。你没有显示任何代码(为什么不呢?)所以当然所有这些都是猜测。

答案 1 :(得分:0)

使用

[tableView removeRowsAtIndexSet:indexSet withAnimation:YES];

答案 2 :(得分:0)

您可以使用此示例(清除/刷新/重绘)您的cellView:

  1. 使用与原始相同的框架创建新单元格。
  2. 使用与原始相同的框架重绘它。
  3. 将原始对象放入其中。
  4. 在此示例中,“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;
    }
    
相关问题