2013-03-06 4 views
0


유니버설 iPhone/iPad 앱을 만들고 기본보기에서 맞춤 셀을 만들고 싶습니다. iPhone에서는 잘 작동하지만 iPad에서는 dequeueReusableCellWithIdentifier가 : 셀 대신 nil을 반환합니다. 여기에 내 코드의 일부는 (어쨌든 작동하지 않기 때문에 나는 정상적인있는 UITableViewCell 내 사용자 정의 세포를 대체)입니다 : (iOS 유니버설 앱 - 맞춤 UITableViewCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier; 

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     CellIdentifier = @"MainPadCell"; //works fine when replaced with MainPhoneCell 
     __weak UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; //returns nil 

     [cell.textLabel setText:@"Test"]; 

     return cell; //crash 
    }else{ 
     CellIdentifier = @"MainPhoneCell"; 
     __weak UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

     [cell.textLabel setText:[NSString stringWithFormat:@"Cell %i", indexPath.row]]; 

     return cell; 
    } 
} 

이상한 것은 내가 MainPhoneCell와 MainPadCell 셀을 교체 할 때 전화 세포를 보여주고 있다는 것입니다 I 불구하고 내 iPad Storyboard에 MainPhoneCell 재사용 식별자가 없으므로 iPad 스토리 보드에 MainPadCell이 있고 찾을 수 없습니다.
조언 해 주셔서 감사합니다.

+0

가 이미 문제를 해결,이 코드를보고 응답을 위해 잘 모두 감사합니다 작동합니다. – haluzak

+0

사용자가 cellForRowAtIndexPath에 iPhone 또는 iPad가 있는지 확인하는 것은 실제로 작업을 수행하는 데 비효율적 인 방법입니다. 이 메소드는 셀이 표시 될 때마다 실행됩니다. 잠재적으로 수천 번. –

답변

2

두 컨트롤러에 동일한 컨트롤러를 사용하는 경우 재사용 식별자가 동일해야합니다. 선택적으로 iPad TableViewCell에서 더 많은 객체 (레이블 등)를 가질 수 있으며 iPad 셀에서 상황을 다르게 배치 할 수 있지만 서브 클래 싱 된 TableViewCell (서브 클래 싱하는 경우)과 재사용 식별자는 iPhone과 iPad.

서브 셀링 한 셀과 셀 객체 (다시 서브 클래 싱하는 경우)와 TableView Delegate 및 Datasource 아울렛을 서브 클래 싱 한 VC에 연결해야합니다. 같은 sublcass를 사용하고 ID를 다시 사용하는 방법을 보여주는 샘플 프로젝트에

링크 : https://dl.dropbox.com/u/3660978/UniversalTableView.zip

+0

안녕하세요, 고마워요.하지만 2 개의 스토리 보드를 사용하고 있고 2 개의 다른 재사용 식별자를 설정하고 내가 iPad 또는 iPhone에 있는지 확인하기 때문에 재사용 식별자가 동일 할 필요는 없습니다. 나는 마침내 문제를 발견했다, 그것은 완전히 다른 곳에 있었고 위에서 쓴 코드는 완벽하게 잘 작동한다. 시간을내어 주셔서 감사합니다! – haluzak

+0

왜 다른 재사용 식별자를 확인 하시겠습니까? cellForRowAtIndexPath에서이 작업을 수행하는 경우 셀을 스크롤하여 표시 할 때마다이 작업이 실행됩니다. 방금 샘플 프로젝트를 완료하여 동일한 재사용 식별자를 사용한다는 것을 보여줍니다. 답변을 업데이트하고 압축 된 프로젝트에 대한 링크를 제공했습니다. –

+0

그래, 맞아, 그냥 테스트하고 그것을 지적 주셔서 감사합니다 :) – haluzak