문제

한 열에 특정 데이터 만 표시하기 위해 여러 열로 NstableView를 설정하는 쉬운 방법은 무엇입니까? Iboutlets가 설정되어 있지만 거기에서 어디로 가야할지 모르겠습니다.

도움이 되었습니까?

해결책

코코아 바인딩/코어 데이터를 사용하지 않는다고 가정하면 nstableviewdatasource 규약. 일반적으로 컨트롤러는 프로토콜을 구현하므로 컨트롤러 .M 파일을 열고 컨트롤러의에 이러한 메소드를 추가합니다. @implementation:

- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView {
  return 25;  // fill this out
}

– (id) tableView:(NSTableView*)tableView
       objectValueForTableColumn:(NSTableColumn*)column
       row:(int)row {
  return row % 3 ? @"Tick..." : @"BOOM!";  // fill this out
}

테이블을 설정해야합니다 dataSource 컨트롤러에 속성. 테이블보기에서 컨트롤러 및 세트로 인터페이스 빌더 제어 드래그에서 dataSource. 이제 빌드하고 실행하면 테이블에 데이터가 표시됩니다.

하나의 열만 작성하려면 컨트롤러에 iboutlet nstablecolumn*을 추가하십시오. 그것을 부르자 explosiveColumn. 인터페이스 빌더에서 컨트롤러에서 작성하려는 열로 제어 드래그 explosiveColumn. 그런 다음 TableView : ObjectValuefortableColumn : Row : column 매개 변수는 배출구가 설정된 것과 동일한 객체입니다.

– (id) tableView:(NSTableView*)tableView
       objectValueForTableColumn:(NSTableColumn*)column
       row:(int)row {
  if (column == explosiveColumn) {
    return row % 3 ? @"Tick..." : @"BOOM!";
  } else {
    // other columns blank for now
    return nil;
  }
}

이 튜토리얼은 유용 할 수 있습니다. http://www.cocoadev.com/index.pl?nstableViewTutorial

다른 팁

다음은 데이터 소스 방법과 문서 기반 애플리케이션과 함께 여러 테이블보기를 사용하는 예입니다.

#pragma mark - Data Source Methods
- (NSInteger) numberOfRowsInTableView:(NSTableView *)tv
{
    if (tv == racerTableView)
        return [racerList count];
    else if (tv == vehicleTableView)
        return [vehicleList count];
    else
        return 0; // something wrong here...
}

- (id)tableView:(NSTableView *)tv objectValueForTableColumn:(NSTableColumn *)col
        row:(NSInteger)rowi
{
    NSString *colid = [col identifier];
    if (tv == racerTableView){
        NHRacers *racer = [racerList objectAtIndex:rowi];
        return [racer valueForKey:colid];
    }
    else if (tv == vehicleTableView){
        NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
        return [vehicle valueForKey:colid];
    }
    else
        return 0; // something wrong here...
}

- (void)tableView:(NSTableView *)tv setObjectValue:(id)obj forTableColumn:(NSTableColumn *)col row:(NSInteger)rowi
{
    NSString *colid = [col identifier];
    if (tv == racerTableView) {
        NHRacers *racer = [racerList objectAtIndex:rowi];
        [racer setValue:obj forKey:colid];
    }
    else if (tv == vehicleTableView){
        NHVehicles *vehicle = [vehicleList objectAtIndex:rowi];
        [vehicle setValue:obj forKey:colid];
    }
    else
        nil; // something wrong here...    
    [self updateChangeCount:NSChangeDone];
}

TableView DataSource 아울렛은 파일의 소유자에게 설정되었으며 파일의 소유자는 IB의 VehicletableView 및 RacertableView를 해당 "테이블보기"로 설정했습니다. Colid 키는 식별자를 확인합니다 ( "Identity"드롭 다운 아래 테이블 뷰 열을 선택하여 IB로 설정하고 "Identity Inspector"가 표시됩니다). 이 값은 테이블 뷰에 표시되는 클래스의 KVC (키 코딩 호환) 속성으로 선택되었습니다. 저 소문자 첫 글자를 사용하십시오 (휴식은 Apple 문서 참조).

예 : (nhvehicles.h)

@interface NHVehicles : NSObject
{
    NSUInteger entry;
    NSString *name;
    NSString *vehicleClass;
}
@property NSUInteger entry;
@property NSString *name, *vehicleClass;
@end

(nhvehicles.m)

@implementation NHVehicles
@synthesize entry, name, vehicleClass;
@end

이 테이블 뷰의 경우 "Entry", "Name"및 "VehicleClass"가 해당 열의 식별자 필드에 입력됩니다 (w/o ").

클래스에 일부 데이터를 표시하지 않으려면 열 식별자의 키를 입력하지 마십시오. 주의 한 단어 : Xcode 4.5.1을 사용하고 있으며 일단 특정 열 식별자에 대한 몇 개의 키를 입력 한 다음 내 마음을 바꾸고 텍스트를 지우려고 시도한 것을 알았습니다. 식별자 필드 (편집 한 열에 대해 더 이상 필드를 비워 둘 수 없습니다). 이것은 일하기 어렵지 않았지만 놀랍습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top