2014-07-22 2 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

왜 보관 해제보기 다음 보관할까요? 이 세 줄을 주석으로 처리하고 변경 사항이 있는지 확인하십시오. – TheAmateurProgrammer

+0

@TheAmateurProgrammer : 나는'self.progressView'의 많은 사본이 필요하기 때문에 이렇게했습니다. 이 세 줄을 생략하면 마지막 줄의보기 하나만 나타납니다. 그러나이 경우 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

내 모델로 조금 바뀌었지만 제대로 작동했습니다 ... –