2014-02-22 3 views
0

사용자 정의 유형의 NSArray에 대한 속성을 표시하는 UITableViewController이 있습니다. 세로 방향으로 세 개의 레이블 (열과 같은 역할을 함)을 표시하고 싶지만 가로로 보면 UITableViewCell에 더 적합 할 수 있으며 5 개의 레이블을 표시하고 싶습니다. 방향에 따라 UITableViewCell의 내용을 변경하십시오.

현재 나는 UITableViewCellUILabels을 넣고 난 파단에 도착하고, cellForRowAtIndexPath 방법의 텍스트를 설정할 수 있도록 태그를 지정함으로써 스토리 보드 편집기에서 프로토 타입 셀 내 세로 세포를 배치하고있다. 나는 라벨의 자동 레이아웃을 쉽게 사용할 수 있도록이 길을 시작했다.

오리엔테이션이 바뀌었을 때 셀에서 항목을 다시 이동하거나 항목을 이동하는 방법에 대한 제안이 많이 있지만 하위보기의 수를 어떻게 바꿀 수 있는지는 알 수 없습니다. 두 가지 다른 셀 식별자 (가로 모드의 레이블이 더 많은 셀)를 사용하고 [UIDevice currentDevice].orientation을 기반으로 원하는 셀 식별자를 선택하려고 생각했습니다. 나는 또한 회전시 세포의 재 장전을 강제 할 필요가 있다고 생각한다.

더 쉽고/좋은 방법이 있나요?

답변

2

올바른 길을 가고 있습니다. 고유 한 식별자로 2 개의 프로토 타입을 개발하고 현재 방향에 따라 cellForRowAtIndexPath에 제공하십시오. 더 레이블 셀의 경우

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { 

     LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:@"portraitCell" forIndexPath:indexPath]; 

     // configure cell 

     return cell; 

    } else { 

     LatestNewsCell *cell = (LatestNewsCell *)[tableView dequeueReusableCellWithIdentifier:@"landscapeCell" forIndexPath:indexPath]; 

     // configure cell 

     return cell; 
    } 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [self.tableView reloadData]; 
} 

, 당신은 단지 이들에 대한 추가 IBOutlets을 만들고 두 방향에서 사용되는 라벨에 대한 기존 재사용.

편집 : 방향 변경시 테이블을 다시로드하십시오.

1

전체 데이터 원본을 위임하거나 위임을 변경할 수도 있고 방향 변경시 전체보기를 사용할 수도 있습니다. 얼마를 구성해야하는지에 따라 코드를 훨씬 더 명확하게 만들 수 있습니다. 애플은 여기에 좋은 가이드가 있습니다 : https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html#//apple_ref/doc/uid/TP40007457-CH7-SW14

+0

감사합니다. 전 View Controller 전체를 스와핑 할 생각이 없었습니다. 레이아웃을 좀 더 깔끔하게 만들지 만, 하나가 아닌 두 개의 클래스를 유지해야하므로 결국 두 VC 사이에서 코드를 복제하지 않아도됩니다. – SlimCheney

+1

if-else 문에 중복 된 코드가있는 경우 더욱 악화됩니다! 얼마나 많은 중복 코드를 저장할 수 있는지 계산해야합니다. 너무 많은 경우 어쩌면 당신은 VC에서 일부 논리를 다른 클래스로 분리하는 것에 대해 생각해야합니다 (아마도보기 컨트롤러가 데이터 모델 작업을 수행하고 있을까요?). – TAKeanice

0

또 다른 옵션은 UICollectionViewController입니다. UIkit의 테이블은 단일 열에 대해 작성되는 반면 collectionViews는 달성하려는 레이아웃과 같은 더 복잡한 레이아웃을위한 것입니다.

관련 문제