2012-11-28 4 views
0

cellForRowAtIndexPath는 보이는 셀만로드한다는 것을 알고 있습니다. 그것을 아래에 3 개의 세포를로드 할 수 있도록 강제로 방법이 있습니까?cellForRowAtIndexPath 보이는 셀 위아래로 3 개의 셀로드

+0

이 방법은 거의 항상 요청 된 셀이 구성된 곳입니다. 그게 당신이 "짐"이라는 뜻인가요? 'cellForRowAtIndexPath'는 테이블에 셀을 배치한다는 의미에서 아무 것도로드하지 않습니다. 주로 UITableViewController에 제어기가 어딘가에 배치하려고하는 셀 (항상 보이는 셀 일 수 있음)을 (참조로) 식별하기위한 메소드를 제공합니다. 컨트롤러는 셀의 프리젠 테이션을 처리합니다. – Jim

+0

세포를로드하는 동안 무엇을해야합니까? 광대 한 계산? 네트워크에서 다운로드 하시겠습니까? –

답변

3

아니요, cellForRowAtIndexPath은 현재 셀만로드합니다.

귀하의 질문은 당신이 계산적으로 비싸거나 느린 것을 당신의 cellForRowAtIndexPath에서하고 있다고 제안합니다. 예를 들어 게으른 로딩 이미지를 수행하고 있지만 게으른 로딩 경험을 줄이기 위해 후보 "다음"셀에 필요한 일부 이미지를 "미리 가져 오기"를 원할 수도 있습니다. 일반적으로 객체를 실제로 미리 가져 오지는 않지만 객체가 필요로하는 데이터 조각 만 가져옵니다.

프리 페치해야 할 필요가 있다고 느끼는 종류에 대해 더 많은 정보를 제공해야하며, 더 나은 조언을 제공 할 수 있습니다. 그것은보기 드문 문제입니다. 컨트롤러가보기를 표시 할 때 사용하는 잘 디자인 된 모델을 가지고있을 때 다소 우연합니다. 이전 3 개 셀과 다음 3 개 셀을 확인하고 싶은 모델의 특성과 내용을 조금이라도 공유하고 싶을 수도 있습니다.

+0

그래서 두 가지 유형의 UITableViewCell 서브 클래스가 있습니다. 하나는 A이고 하나는 B입니다. 문제는 A가 이미지를로드하고 있지만 실패하면 B 레이아웃으로 표시하려고합니다. 어떻게해야합니까? – adit

+0

저는 블록 헤드입니다. 호출자 (뷰 컨트롤러)가 완료시 수행해야하는 것을 나타낼 수 있도록 블록 가져 오기 루틴에 블록 매개 변수가있을 것입니다. 나는 블록에'BOOL success' 매개 변수가 있는지 확인하여 블록이 가져 오기의 성공 여부에 따라 조건부 논리를 수행 할 수 있도록했습니다. – Rob

+0

그래서 먼저이 이미지를 모두 미리 프리 패치 한 다음 어딘가에 어떤 셀을 사용할 지 알려주는 깃발이 있습니까? – adit

1

일반적으로 UITableView는 특정 셀을로드 할시기를 결정하는 모든 과정을 관리합니다. 자동으로 보이지 않는 셀을 제거하고 내부 재사용 대기열에 해당 셀을 저장합니다.

UITableView는 사용 가능한 경우 사전 할당 된 셀을 검색하여 셀 생성 프로세스의 속도를 높이는 데 사용할 수있는 메커니즘을 제공합니다. 이 방법을 올바르게 사용하면 테이블보기에서 스크롤 속도에 문제가 없어야합니다. 이렇게하려면 생성시 셀에 reusabilityIdentifier를 구성하고 cellForRowAtIndexPath: 구현에서 새 셀이 필요할 때 -[UITableView dequeueReusableCellWithIdentifier:] 메서드를 호출해야합니다.

더 많은 속도가 필요한 경우 재사용 가능한 셀과 미리 구성된 셀을 가질 수 있어야합니다. 이와 같은 구현을 통해 얻을 수있는 이점은 여전히 ​​남아 있습니다 (더 많은 행을 준비해야합니다. 를 사용하지만, 요청되는 셀에 대해 cellForRowAtIndexPath:의 속도를 늦추 게됩니다. 또한 UITableView의 표준 대기열과 충돌하지 않도록 매우 조심해야합니다.

재사용 가능성 메커니즘에 대한 자세한 내용은 Apple's UITableView reference을 확인하십시오.

관련 문제