2011-08-20 2 views
0

2 개의 열이있는 NSTableView를 만드는 동안 문제가 발생했습니다.NSTableView의 두 번째 열 텍스트를 설정하는 방법은 무엇입니까?

행의 해당 열 값을 어떻게 설정합니까? colText을 행의 열에 넣고 싶지만 거의 달성하기가 불가능합니다. 오른쪽에

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { 
    uint32_t size = *((uint32_t *)[[itemSizes objectAtIndex:rowIndex] bytes]); 
    NSString *colText = [NSString stringWithFormat:@"%d bytes", size]; 

    return [objNames objectAtIndex:rowIndex]; 
} 

나는 그것이 왼쪽 열에서 수 [objNames objectAtIndex:rowIndex] 싶습니다, 그리고 colText :

여기에 코드입니까?

나는 조금 붙어 있습니다.

도움을 주시면 감사하겠습니다.

+0

"행의 열"

이 여기에이 주제에 대한 자세한입니까? 각 열은 각 행에 대해 쿼리됩니다. –

답변

2

열 식별 정보 (예 : @ "firstColumnID"와 @ "secondColumnID")를 부여 그래서 당신은 할 수 있습니다 :

- (id)tableView:(NSTableView *)aTableView 
     objectValueForTableColumn:(NSTableColumn *)aTableColumn 
     row:(NSInteger)rowIndex 
{ 
    if ([[aTableColumn identifier] isEqualToString: @"firstColumnID"]) 
     return [objNames objectAtIndex: rowIndex]; 
    else 
    { 
     // In the original code, NSData was used, but for simple values 
     // like this, NSNumbers are better suited, IMO: 
     NSUInteger size = [[itemSizes objectAtIndex: rowIndex] unsignedIntegerValue]; 
     return [NSString stringWithFormat: @"%lu bytes", size]; 
    } 
} 
+0

주목 : 또한'itemSizes'의 해석을 NSData 객체의 배열에서 NSNumber 객체의 배열로 변경했습니다. 코드의 다른 위치 (즉, 배열이 채워지는 곳)에 반영되어야하는 선순환. –

+0

@Peter : 고마워, 나는 항상 이것들을 섞는다. –

+0

@Peter : 죄송합니다. 코드를 다시 변경하거나 코드에 주석을 추가하겠습니다. –

0

두 가지 옵션 :

  • 업데이트 바인딩을 사용하도록 코드와 사용자 인터페이스 : 바인딩 다음 데이터 배열에 배열 컨트롤러를 결합하고, 펜촉에 NSArrayController를 추가 한 다음 방법 -formattedSize를 추가하고 테이블의 열은 arrangedObjects.description 및 arrangedObjects.formattedSize에 배치됩니다.

  • 또는 NSTableColumn을 사용하여 반환 된 데이터를 구별합니다.

- (id)tableView:(NSTableView *)tableView 
     objectValueForTableColumn:(NSTableColumn *)tableColumn 
     row:(int)row 
{ 
    id value = nil; 

    if ([[tableColumn identifier] isEqualToString:@"column1"]) 
    { 
     value = [arrayA objectAtIndex:row]; 
    } 
    else 
    { 
     value = [arrayB objectAtIndex:row]; 
    } 

    return value; 
} 
0

적은 코딩 및 바인딩없이 또 다른 옵션은, 열 식별자를 설정하는 것입니다 클래스 속성과 동일해야합니다. 이 경우 if/else를 사용하지 않아도됩니다.

NSTableView with multiple columns