NSTableView隐藏屏幕外的行

时间:2018-08-06 13:46:03

标签: objective-c nstableview

我有一个NSTableView可以正常工作,除了它只显示屏幕数据。我检查了它的加载情况,所有数据都在源数组中(3列= 3个可变数组)。所有行似乎都在那里,但是当我向上滚动(或向下滚动,取决于您的视点)时,屏幕外的行为空白。

我增加了“表格视图”的高度,并显示了更多数据,但对于屏外行具有相同的效果。实际上,我是通过复制工作正常的早期版本来构建表格的-我已经比较了属性,看不到任何差异。

任何想法。我很高兴添加代码,但我什至不知道该向您展示什么。

要确认构建,请使用tableView代码:

- (NSString *) returnedValue: (NSString *) keyName forRow: (NSUInteger) row
{
    if( [keyName isEqualToString: Col1Id] )
    {
        return [actuelColDesc objectAtIndex: row];
    }
    else if( [keyName isEqualToString: Col2Id] )
    {
        return [actuelColSing objectAtIndex: row];
    }
    else if( [keyName isEqualToString: Col3Id] )
    {
        return [actuelColPlur objectAtIndex: row];
    }
    return nil;
}

#pragma mark - Table View Data Source

- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView
{
    return self.actuelColDesc.count;
}

- (id) tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    return [self returnedValue: tableColumn.identifier forRow: row];
}

填充方法:

- (void) doPopulateTable:exportedTable withTitle: (NSString *) titleString andWord: (NSString *) reportedWord sizingFlag: (NSUInteger) sFlag
{
    NSUInteger size1, size2, size3;
    NSRect tableFrame;

    currentVoice = 1;
    noOfArrays = [exportedTable count];
    if( noOfArrays > 6 )
    {
        switch (currentVoice)
        {
            case 1:
                actuelColDesc = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:0]];
                actuelColSing = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:1]];
                actuelColPlur = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:2]];
                reportParseSing = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:7]];
                reportParsePlur = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:8]];
                break;
            case 2:
                actuelColDesc = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:0]];
                actuelColSing = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:3]];
                actuelColPlur = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:4]];
                reportParseSing = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:9]];
                reportParsePlur = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:10]];
                break;
            case 3:
                actuelColDesc = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:0]];
                actuelColSing = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:5]];
                actuelColPlur = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:6]];
                reportParseSing = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:11]];
                reportParsePlur = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:12]];
                break;
            default:
                break;
        }
    }
    else
    {
        actuelColDesc = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:0]];
        actuelColSing = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:1]];
        actuelColPlur = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:2]];
        reportParseSing = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:3]];
        reportParsePlur = [[NSMutableArray alloc] initWithArray:[exportedTable objectAtIndex:4]];
    }
    if( noOfArrays == 14 )
    {
        [btnBaseMiddle setHidden:NO];
        [btnBasePassive setHidden:NO];
    }
    [reportTable reloadData];
    if( sFlag == 2 )
    {
        size1 = 686;
        size2 = 644;
        size3 = 320;
    }
    else
    {
        size1 = 524;
        size2 = 474;
        size3 = 150;
    }
    tableFrame = [[self window] frame];
     tableFrame.size.width = size1;
     [[self window] setFrame:tableFrame display:YES];
     tableFrame = [[self reportTable] frame];
     tableFrame.size.width = size2;
     [[self reportTable] setFrame:tableFrame];
     [[self column1] setWidth:size3];
     [[self window] setTitle:[NSString stringWithString:titleString]];
}

(我用于调试的运行有107行-即每个数组都有107个对象。)

TableView的属性包括:基于视图的,浮动组行(YES),截断最后一个可视行(NO),启用状态(YES),自动调整子视图大小(YES)。

1 个答案:

答案 0 :(得分:0)

对shiva_shub和Koen浪费时间表示歉意:似乎某些对象的窗口控制器在我显示窗口之前没有被激活。因此,一旦在窗口中放置人口代码 之后,一切都可以正常工作。我以为,自从我用笔尖初始化后,所有的“ Outlets”和“ Actions”也都将被实例化。

感谢我的评论员的帮助。