문제

사용자가 uitableview의 맨 아래로 스크롤 할 때 uiactivityindicatorview를 "나타나고 애니메이션"하려고합니다.

테이블 뷰의 하단에 도달하면 완료하는 데 몇 초가 걸린 웹 레퍼스트가 이루어지면 UiactivityIndicatorView가 "정지 및 숨기기"해야합니다.

TableView : WillDisplayCell : ForrowatIndexPath : WillDisplayCell을 사용하여 UiActivityIndicatorView의 모양을 트리거합니다.

목록 항목

그러나 문제는 전체 메소드 (예 : TableView : WillDisplayCell : ForrowatIndexPath :)가 호출 될 때까지 iPhone 화면에 uiactivityIndicatorView가 나타나지 않는다는 것입니다.

방법에 대한 아이디어

  1. 표시기보기를 표시하십시오
  2. 웹 요청을하십시오
  3. 표시기 뷰를 숨기시겠습니까?

새 스레드? 더 좋은 방법?

감사!!

구체적으로, 내 기능은 다음과 같습니다

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.results && indexPath.row == [self.results count] - 1) {
        [self.loadingSignal setHidden:NO]; // <====== my UIActivityIndicatorView is called "loadingSignal"
        [self.loadingSignal startAnimating];

    /// make web request that will take a few seconds

        [self.loadingSignal setHidden:YES];
        [self.loadingSignal stopAnimating];

        }
    }
}
도움이 되었습니까?

해결책

괜찮아. 위의 코드 스 니펫에서 몇 가지 문제가 있습니다.

  1. 셀을 표시하기 전에 요청이 완료되기를 기다리는 것 같습니다. 이것은 몇 가지 부정적인 포인트가 있습니다. 사용자에게 성가 시며 요청이 꺼지는 동안 UI를 동결 할 가능성이 높습니다 (몇 초가 걸릴 수 있음).
  2. 모든 것이 내에서 발생합니다 willDisplayCell 방법.

이 문제를 해결해야한다고 생각하는 방법은 다음과 같습니다.

  1. 셀 트리거 로딩을 표시합니다 비동기 적으로.
  2. 스피너가있는 "로딩 ..."라는 셀을 표시합니다 (영감은 Tweetie 2 참조).
  3. 귀하의 요청에서 콜백을 기다리십시오
  4. 응답으로 모델을 채우십시오
  5. "로딩 ..."셀을 제거하십시오
  6. 데이터를 다시로드하십시오 [tableView reloadData]

이것은 당신이하고 싶은 일을 달성 할 수 있어야합니다.

다른 팁

당신은 그렇게 시도 할 수 있습니다 CellforseAtIndexPath : Uitableview의 방법

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top