基于视图的表视图中的进度指示器

时间:2014-07-22 09:02:29

标签: objective-c cocoa nstableview nsprogressindicator

我正在尝试显示包含一个NSProgressIndicator的自定义视图。

我正在更改每个计时器事件的doubleValue,但它不会反映在NSProgressIndicator中。它总是在0值。

我使用的代码是:

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {

    self.progressViewTextField.stringValue = [NSString stringWithFormat:@"Row: %ld", row];

    [self.progressViewBar setDoubleValue: [self.progressViewBar doubleValue]+5];

    NSData * archivedView = [NSKeyedArchiver archivedDataWithRootObject:self.progressView];
    NSView * myViewCopy = [NSKeyedUnarchiver unarchiveObjectWithData:archivedView];

    NSLog(@"progress: %lf", self.progressViewBar.doubleValue);

    return myViewCopy;
}

非常感谢任何帮助实现这一目标。

1 个答案:

答案 0 :(得分:1)

请尝试以下代码:

@implementation TVAppDelegate{
    NSInteger barValue;
}


- (id)init
{
    self = [super init];
    if (self) {
        _progressList = [NSArray arrayWithObjects:@"A",@"B",@"C", nil];
        
        [NSTimer scheduledTimerWithTimeInterval:1.0
                                         target:self
                                       selector:@selector(timerMethod)
                                       userInfo:nil
                                        repeats:YES];
    }
    return self;
}

-(void) timerMethod{
    barValue+=2;
    [self.tableView reloadData];
}

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


- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    
    NSData * archivedView = [NSKeyedArchiver archivedDataWithRootObject:self.progressView];
    NSView * myViewCopy =[ NSKeyedUnarchiver unarchiveObjectWithData:archivedView];
    
    [[[myViewCopy subviews] objectAtIndex:1] setDoubleValue: [self.progressViewBar doubleValue]+5];
    
    
    [[[myViewCopy subviews] objectAtIndex:1] setDoubleValue: barValue];
    [[[myViewCopy subviews] objectAtIndex:1] startAnimation:self];
    
    return myViewCopy;
}