2009-11-12 5 views
1

작은 코코아 앱이 있으며 UI는 주로 단일 NSTableView로 구성됩니다. 그러나 나는 그것에 표시하고 싶은 데이터의 두 가지 목록을 가지고 있으며, 둘 사이를 토글한다. 제 질문은, 이것을 구현하는 가장 좋은 방법은 무엇이라고 생각합니까?NSTableView - 2 개의 데이터 소스 간 전환

이제 BOOL 플래그를 사용하여 dataSource 메서드에서 어떤 Array를 사용할지 변경할 수 있습니다. 그러나 목록에 완전히 다른 데이터 개체가 포함되어 있기 때문에 사용되는 NSCell 클래스도 변경해야합니다. 그렇다면 테이블을 다시로드해야합니다 ([table reloadData]가이 모든 것을 안정적으로 다시로드하겠습니까?).

또는 NIB 파일에 2 개의 분리 된 NSTableView를 만들고 가시성을 전환 할 수 있습니다.하지만 이것은 탁 트인 것처럼 보입니다.

저는 코코아에 대해 꽤 잘 알고 있습니다.하지만 이런 식으로 검색하는 방법을 잘 모르겠습니다. 다른 개발자들이이 문제를 어떻게 해결할 지 궁금합니다.

감사합니다.

답변

1

또는 NIB 파일에 2 개의 별도 NSTableView를 만들고 가시성을 전환 할 수 있습니다.

전혀 해킹되지 않습니다. 서로 다른 여러 데이터 집합에 대해 동일한 테이블 뷰를 사용하는 것이 좋지 않습니다.

두 개의 탭이있는 tabless NSTabView을 만들고 두 번째 탭에 NSTableView을 입력하고 두 번째 탭에는 NSTableView을 입력하고 NSTableView을 입력하면됩니다. 그런 다음 NSTabView에서 -selectTabViewItemAtIndex:을 호출하여 테이블보기간에 전환 할 수 있습니다.

+0

이것은 실제로 제가 바라는 해결책입니다. 나는 여전히 UI 컨트롤이 Cocoa Framework에서 나에게 유용하다는 것을 배우고 있으며 tabless "TabView"(또는 다른 프레임 워크에서 호출 된 ViewStack)는 내가 사용하기를 원하는 것입니다. 나를 가리켜 주셔서 고마워요. – nrj

0

UITableViewDataSourceUITableViewDelegate을 별도로 구현하지 않고 왜 토글 이벤트가 발생했을 때 UITableView이 가리키는 부분을 변경하나요? 하나의 구현에서 모든 조건부 코드를 갖는 것보다 훨씬 더 깨끗한 것처럼 보입니다. 대부분의 예제에서 두 프로토콜을 모두 구현 한 UITableViewController이 세 가지 개별 개체가 될 수 없다는 것을 의미하지는 않습니다.

+0

UITableView는 NSTableView가 아닙니다. –

+0

오, 이런. 당신 말이 맞아요, 피터. 내 부분에서 독해력을 잃는 길. 미안, 닉! –

+0

반면에 AppKit 클래스에는 같은 원칙이 적용되지 않습니까? UIKit 클래스에서 수행하는 동일한 기본 구조의보기, 데이터 소스 및 델리게이트가있는 것 같습니다. 기계 부품이 더 밀접하게 연결되어 있습니까? –

-1

Sixten Otto의 대답은 올바른 것입니다.

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (dataSourceOne) { 
    [self cellForRowAtIndexPathDS1:indexPath]; 
    } 
    else { 
    [self cellForRowAtIndexPathDS2:indexPath]; 
    } 
} 

을 다음 cellForRowAtIndexPath의 두 가지 버전을 구현 : 그건 그냥 일을 뭔가를 함께 해킹하기를 원한다면, 내가 같은 것을 할 수도있다. 재로드 데이터 메소드가 화면의 모든 것을 다시로드 할 것이라고 확신합니다.

해킹되었지만 실행 가능합니다.

+0

아니, Sixten 오토의 UITableView 대답은 NSTableView 질문에 대한 정답이 아닙니다. –

+0

아 맞습니다 ... 모든 코코아 질문이 아이폰 질문이 아닙니다. 멍청 아! –