2014-07-22 66 views
1

我試圖顯示包含一個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; 
} 

任何幫助實現這一目標表示高度讚賞。

+0

你爲什麼要存檔然後取消存檔看法?嘗試對這3行進行註釋,看看它是否會改變任何內容。 – TheAmateurProgrammer

+0

@TheAmateurProgrammer:我這樣做是因爲我需要'self.progressView'的許多副本。如果我省略這3行,最後一行中只有一個視圖會出現。但是在這種情況下progressIndicator *表示*。 –

+2

這似乎是一個奇怪的方式來創建副本。我假設你正在創建一個基於視圖的表格視圖?如果是這樣,請嘗試使用'makeViewWithIdentifier:'方法,或嘗試通過歸檔進行復制來切換順序,然後更改進度視圖的值。 – TheAmateurProgrammer

回答

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; 
} 
+0

我改變了一下我的模型,它工作得很好... –