2008-09-16 4 views
2

표시 할 데이터를 기반으로 NSTableView의 일부 열을 동적으로 숨기거나 표시하고 싶습니다. 기본적으로 열이 비어 있다면 열을 표시하고 싶습니다. 숨겨진. 현재 컨트롤러 클래스를 테이블에 대한 대리자로 채우고 있습니다.NSTableView의 열을 동적으로 숨기기

아이디어가 있으십니까? 인터페이스 작성기에서 숨겨진 열을 설정할 수 있지만 열이 없거나 비어 있는지 확인하지 않는 것이 좋습니다. 메서드가없는 것처럼 보이기 때문입니다. 테이블의 모든 데이터가 채워지는 전후에 호출됩니다.

답변

0

NSTable은 테이블을 칠하는 클래스입니다. 당신이 말했듯이, 당신은 당신이 테이블을 델리게이트 (delegate)로주는 클래스를 가지고 있으며,이 클래스는 테이블에 디스플레이 할 데이터를 제공합니다. 대리자 클래스 내에 NSArray의 테이블 데이터를 저장하면 하나의 열이 비어 있는지 쉽게 알 수 있습니다. 그리고 NSArray는 델리게이트 메소드를 통해 클래스에 몇개의 열이 있는지 물어 봤습니다. 그래서 물어볼 때, 얼마나 많은 열을 가지고 있는지를 찾고 내부적으로 저장 한 열의 실제 수 대신에 그 수를보고하십시오. (열, 행)에 대한 데이터를 제공하고 빈 열을 건너 뜁니다.

+0

하게 여기 내 NSUserDefaults의 키 식별자 "상태"와 NSTableViewColumn을 결합하는 방법입니다 많은 감각 ... 나는 아마 그것을 생각해야했다. 코코아에 대한 더 많은 경험이 필요하다고 생각합니다. 도와 주셔서 감사합니다. :) – Andy

1

지금은 완전한 대답이 없지만 Bindings를 살펴보십시오. 일반적으로 코코아 바인딩을 사용하여 모든 종류의 작업을 수행 할 수 있습니다.

는 NSTableColumn 바인딩 가시성 없습니다,하지만 당신은 당신이 널 자리 표시 자에 바인딩 할 수 그리고 0

의 폭을 설정하고이 값을 0으로 설정할 수 있습니다 -하지만 잊지 마세요 다른 자리 표시자를 적당한 값으로 설정하십시오.

(내가 말했듯이 이것은 시작일 뿐이므로 약간의 조정이 필요할 수 있습니다.)

0

모든 데이터가 채워지는 시간이 없습니다. NSTableView는 데이터를 저장하지 않으며 데이터 소스 (또는 바인딩을 사용하는 경우 바인딩 된 객체)에서 동적으로 묻습니다. 데이터 소스에서 가져온 데이터를 사용하여 도랑을 그립니다. 예를 들어, 테이블에 보이지 않는 데이터가 있는지 확인해야합니다.

데이터 소스를 사용하는 것 같습니다. 데이터가 변경되면 테이블에서 -reloadData를 호출하는 것은 사용자의 책임입니다. 이는 약간의 잘못된 이름입니다. 그것은 '모든 것을 무효화하는 것'과 같습니다.

즉, 데이터가 언제 바뀌는 지 이미 알고 있어야합니다. 이것이 열을 숨겨야하는 지점을 계산할 수있는 지점입니다.

3

나는 이것을 바인딩으로했지만 인터페이스 빌더를 통해 프로그래밍 방식으로 설정했다. 당신은 또한 포매터 및 모든 물건을 추가 할 수 있습니다 물론

NSTableColumn *aColumn = [[NSTableColumn alloc] initWithIdentifier:attr]; 
[aColumn setWidth:DEFAULTCOLWIDTH]; 
[aColumn setMinWidth:MINCOLWIDTH]; 
[[aColumn headerCell] setStringValue:columnLabel]; 

[aColumn bind:@"value" 
    toObject:arrayController 
    withKeyPath:keyPath 
    options:nil];    

[tableView addTableColumn:aColumn]; 
[aColumn release]; 

:

이 사이비 - 조각은 당신에게 그것의 요점을 제공해야합니다.

0

@amrox - 귀하의 제안을 정확하게 이해하고 있다면 내 테이블에있는 NSTableColumns의 숨겨진 속성에 값을 바인딩해야한다고 말하고 있습니까? 그게 작동 할 것 같아요, 그러나 NSTableColumn 숨겨진 된 속성을 가지고 있다고 생각하지 않습니다, 이후 isHidden 및 setHidden 메시지를 제어 할 수있는 열의 가시성 - 어떤 속성을 놓치지 않으면 않는 속성 (꽤 가능하다).

10

Mac OS X v10.5 이상에서는 NSTableColumn에 대해 setHidden: selector이 있습니다.

이 열이 동적 식별자를 사용하여 표시/숨길 수 있습니다 :

NSInteger colIdx; 
NSTableColumn* col; 

colIdx = [myTable columnWithIdentifier:@"columnIdent"]; 
col = [myTable.tableColumns objectAtIndex:colIdx]; 
[col setHidden:YES]; 
1

그것은 인터페이스 빌더에서 작동하지 않습니다. 그러나 그것은 프로그래밍 방식으로 작동합니다.

스위프트 :

tableView.tableColumnWithIdentifier("Status")?.bind("hidden", toObject: NSUserDefaults.standardUserDefaults(), withKeyPath: "TableColumnStatus", options: nil) 

목표 - C가 :

[[self.tableView tableColumnWithIdentifier:@"Status"] bind:@"hidden" toObject:[NSUserDefaults standardUserDefaults] withKeyPath:@"TableColumnStatus" options:nil]; 
관련 문제