2011-10-05 11 views
3

인터페이스 빌더에서 사용자 지정 UITableViewCell을 만들고 실제 UITableViewCell의 파일 소유자 및 사용자 지정 클래스를 새로운 사용자 지정 UITableViewCell 클래스로 계속 설정하려고했습니다. 내가 파일의 소유자의 IBOutlets를 연결하고 왔을 때 오류를 얻을 것입니다 : 왜 사용자 정의 TableViewCell에 파일 소유자가 필요하지 않습니까?

TVCell *cell = (TVCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:nil options:nil]; 

    for(id currentObject in topLevelObjects) 
    { 
     if([currentObject isKindOfClass:[TVCell class]]) 
     { 
      cell = (TVCell *)currentObject; 
      break; 
     } 
    } 

마지막으로 난 당신이있는 UITableViewCell 개체에서 IBOutlets를 연결해야 실현, 그리고 파일의 소유자. 왜 이런거야?

감사

답변

4

File 's Owner는 결국 NIB를로드 할 개체의 개체 틀 개체입니다. NIB 외부의 개체가 NIB 내부의 개체를 참조하는 방법입니다. 귀하의 경우, NIB에서 테이블 뷰 셀을 만들려고하므로 다른 개체가 필요합니다. 테이블 뷰 셀은 NIB 외부와 외부에 둘 다있을 수 없습니다. 코드의이 라인에서

:

NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TVCell" 
                 owner:nil 
                 options:nil]; 

당신을 해결하기 위해 인터페이스 빌더에서 파일의 소유자 자리 표시 객체를 지정 얻는다. 귀하의 코드가 'MyTableViewController'와 같은 클래스에 있다고 생각합니다. 그렇다면 owner 매개 변수에 대해 'self'를 - [NSBundle loadNibNamed : owner :]에 전달할 수 있습니다. 그렇게했다면이 NIB를로드하는 데 유용한 MyTableViewController 클래스에 콘센트가있을 수 있습니다. 특히,이를 사용하여 for 루프를 피할 수 있습니다. 당신은 이런 식으로 그렇게 할 것 :

  • 는 테이블 셀 펜촉에서 MyTableViewController
  • 에 'loadedTableViewCell'출구 추가, MyTableViewController에 파일의 소유자를 설정합니다.
  • 파일 소유자에서 테이블보기 셀에 'loadedTableViewCell'을 연결하십시오.

는이 유사하게 코드를 변경 :

TVCell *cell = (TVCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    [[NSBundle mainBundle] loadNibNamed:@"TVCell" owner:self options:nil]; 
    cell = [self loadedTableViewCell]; 
    [self setLoadedTableViewCell:nil]; 
} 
+0

우수한 설명. 나는 왜 모두가 배열을 반복하는 대신 이것을하지 않는지 모르겠다. 무엇이 빠졌는가? – jrturton

+0

어떤 사람들은 루프의 감금을 선호합니다. 어휘 전체적으로 범위가 지정된 것에 대해서는 인스턴스 변수가 필요하지 않습니다. –

+0

@JonHess - 우수 설명. 그 문제를 해결해 주셔서 감사합니다. 이와 관련하여'TVCell.h'에 정의 된 IBOutlet이 IB의 Table View Cell (IBOutlets가 File 소유자에 나타나는 방식과 같은 종류)에 나타나는 이유는 무엇입니까? 표보기 셀이 TVCell 유형으로 정의되면 표식이 나타납니다. 이것은 테이블 뷰 셀에 고유합니까? –

0

당신이 컨트롤러를로드 한 경우 것처럼 당신이 전체 펜촉을 사용하지 않는, 펜촉에서 물체를 당기는 것 때문입니다. 이것이 바로 for (topLevelObjects의 id currentObject)가하는 것입니다.

관련 문제