2013-05-23 1 views
0

Storyboard 장면에서 정적 셀을 사용하여 테이블 뷰 컨트롤러를 정의했습니다. 테이블 뷰 자체에는 여섯 개의 섹션이 있으며 각 섹션에는 하나 또는 두 개의 셀이 있습니다. 내보기 컨트롤러에이 방법에서 셀에 데이터를 쓰기 :정적 UITableViewCell은 CellForRowAtIndexPath에서 nil을 반환하지만 특정 섹션에만 적용됩니다.

- (void)setUpAllCells 
{ 
    //Charge Name 
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:0]; 
    TableViewCellTextField *currentTextField = (TableViewCellTextField *)[[self tableView] cellForRowAtIndexPath:path]; 
    [currentTextField.textField setDelegate:self]; 

    //Charge Description 
    path = [NSIndexPath indexPathForRow:1 inSection:0]; 
    currentTextField = (TableViewCellTextField *)[[self tableView] cellForRowAtIndexPath:path]; 
    [currentTextField.textField setDelegate:self]; 

    ... 

    path = [NSIndexPath indexPathForRow:0 inSection:5]; 
    TableViewCellControl *currentControl = (TableViewCellControl *)[[self tableView] cellForRowAtIndexPath:path]; 
    [currentControl setValue:m_data->trailBurnTime]; 
} 

호출되는 : 나는 응용 프로그램을 실행할 때 나는 마지막을 제외하고 예상대로, 각 셀이 응답

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    [self setUpAllCells]; 
} 

섹션.
마지막 섹션의 셀이 내 컨트롤러에 연결되어 있지 않아 스토리 보드 화면에서 기본값을 유지합니다. setUpAllCells에 중단 점을 설정하면 cellForRowAtIndexPath가 마지막 섹션에 대해 nil을 반환한다는 것을 알았습니다.

다른 형식의 다섯 개의보기 컨트롤러에이 형식을 사용했지만 이런 일이 발생하지 않았습니다.

는 여기에 지금까지 시도한 작업은 다음과 같습니다

  • 내가 그 작동하지 않았다 내 자신의 사용자 정의 TableViewCells하고, 표준 UITableViewCells 이것을 테스트했습니다. 마지막 섹션은 항상 nil을 반환합니다.

  • 섹션과 셀을 재배치했습니다. 마지막 섹션은 항상 nil을 반환합니다.

  • 해당 섹션을 완전히 삭제했습니다. 다른 섹션은 여전히 ​​정상적으로 작동합니다.

  • 개의 섹션을 추가했습니다. 5 절의 내용은 CellForRowAtIndexPath에 nil을 반환합니다.

저는 여기를 잃었습니다. 나는 이것이 무엇을 일으킬 수 있는지 알 수 없다.

제안 사항?

+0

테이블보기에 6 개의 섹션이있는 경우 마지막 코드 비트에서와 같이 섹션 6이 없습니다. – rdelmar

+0

@rdelmar 으악. 나는 잘못 입력했다. 그것은 원래 코드에서 5였습니다. 그것은 질문의 맨 아래에 설명 된대로 수행 한 테스트에서 그대로 남겨 두었습니다. – bindsniper001

답변

1

당신은 당신이 결과를 얻을 이유를 모르겠어요 - 나는 그것을 시도하고 세포를 로그인 할 때, 나는 첫 번째 3 개 섹션 유효 세포를 얻었다. 섹션 2를 지나친 것은 모두 null입니다. 솔직히 말해서, 왜 이것이 전혀 작동하지 않는지는 모르겠다. 애플이 정적 테이블 뷰를 채우는 방식이 아니기 때문이다. 테이블 뷰 컨트롤러에 IBOutlet을 셀의 UI 요소로 생성해야합니다. 이와 관련하여 정적 테이블 뷰는 테이블 뷰처럼 하위 뷰가있는 스크롤 뷰와 유사합니다.또한 개별 UI 요소 대신 셀 자체에 IBOutlet을 만든 다음 도트 표기법을 사용하여 사용자 정의 셀의 속성이나 textLabel 및 detailTextLabel과 같은 표준 속성을 처리 할 수 ​​있습니다.

+2

그래, 그게 다야. CellForRowAtIndexPath에 대한 호출을 제거하고 셀에 대한 IBOutlet을 작성했습니다. 자, 모든 것이 잘 작동합니다. 대부분의 세포에서 작동하는 이유는 그들이 화면에 있다는 것입니다. 즉,로드 된보기가 작동하지 않을 때 화면 아래에 있었던 셀만 나타납니다. 테이블 뷰는 처음에는 보이는 셀만로드하기 때문이라고 생각합니다. 따라서 CellForRowAtIndexPath를 사용하여 셀에 액세스하려고하면 여섯 번째 섹션을 벗어나는 데이터가 없습니다. – bindsniper001

0

질문에 대한 재미있는 이야기는 당신이 당신의 tableview의 기능 cellForRowAtIndexPath를 호출 할 때, 나는 다시 그것을 당신이 cellForRowAtIndexPath와의 TableView를 제공하는 UITableViewDelegate로 구현 해야하는 대리인 콜백 함수 호출을 믿는 것입니다.

일단이 기능을 구현하면 셀을 다시 가져옵니다. 나는 당신이 찾고있는 기능이 생각 : 여기

– dequeueReusableCellWithIdentifier:forIndexPath: 
– dequeueReusableCellWithIdentifier: 

봐 : http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html

나는 그게 전부 알지 가능성이 당신이 찾고 있던 답하지만 진실 :).

+0

이것들은 테이블 뷰 메소드입니다. 테이블 뷰가 아닌 사용자 정의 테이블 뷰 컨트롤러를 만들고 있습니다. 기본 구현을 재정의하지 않으므로 그렇게 할 필요가 없다고 생각합니다. – bindsniper001

+0

그냥 잡았어, 당신은 정적 세포를 사용하고있어 ... –

관련 문제