iOS 목록 에서 데 이 터 를 부 드 럽 게 불 러 오 는 문제 해결

프로젝트 요구 사항
제 목록 은 변경 이 필요 합 니 다.원래 페이지 로 딩 은 MJrefresh 프레임 워 크 를 사용 하여 더 많은 데 이 터 를 불 러 옵 니 다.이것 은 위로 당 기 는 동작 이 있어 야 촉발 할 수 있 습 니 다.제 제품 은 끝까지 미 끄 러 지 려 고 할 때 다음 페이지 의 데 이 터 를 자동 으로 불 러 옵 니 다.내 가 직접 보 니 많은 app 들 이 이런 모델 을 사용 하 는 것 을 발견 했다.
MJrefresh 에 대해 서.
MJrefresh 에는 이런 방법 이 없 기 때문에 이 효 과 는 꼭 MJrefresh 가 이 루어 진 것 이 아니 라 이 루어 지지 않 은 파트너 는 MJrefresh 에서 열심히 찾 지 마 세 요.
기능 실현
실현 방법 은 간단 합 니 다.tableView 의 대리 방법 을 사용 하면 쉽게 실현 할 수 있 습 니 다.-(void)tableView:(UITableView*)tableView willDisplayCell:(UITableView Cell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath 가 바로 이 방법 입 니 다.사용자 정의 로 cell 을 표시 합 니 다.이 방법 은 그다지 상용 되 지 않 는 다.그러나 이 방법 은 모든 cell 이 처음 나타 날 때 촉발 할 수 있다.그리고 현재 페이지 의 몇 번 째 cell 이 나타 날 때 더 많은 데 이 터 를 불 러 오 라 고 요청 할 수 있 습 니 다.
구체 코드

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    NSInteger row = [indexPath row];
    if (row == self.dataArray.count - 2 && self.isfinish) {
//dataArray        ,isfinish          
        self.pageNum++;//   
        [self.updataDic addEntriesFromDictionary:@{@"pageSize": @(10), @"pageNum" :@(self.pageNum)}];//    
        [self setupDataModel];//    
    }
}

-(void)serverApi_FinishedSuccessed:(APIRequest *)api result:(APIResult *)sr
{//          
    if (api == self.goodsAPIRequest) {
        if (self.goodsAPIRequest.netWorkType == 22) {
            self.dataModel = [[GoodsListModelBase alloc]initWithDictionary:sr.dic];//  model
            [self.dataArray addObjectsFromArray:self.dataModel.data];
            if (self.dataModel.data.count == 0) {
                [self.tableView.mj_footer endRefreshingWithNoMoreData];
                self.isfinish = NO;
            }else {
                [self.tableView reloadData];

                if (@available(iOS 11,*)) {
                    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//iOS11  reloadData     - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath   ,      cell   , iOS11        cell   。                        

                        self.isfinish = YES;
                    });
                }else {
                    self.isfinish = YES;
                }
             }
 }
}

효 과 는 다음 과 같다.

유창 하 다
매 끄 럽 지?물론 네트워크 상태 가 좋 지 않 은 상태 에서 데이터 가 나 오지 않도록 MJrefresh 드 롭 다운 로드 를 설치 해 야 한다.
로 딩 시 디 더 링 문제 추가 가능

    self.tableView.estimatedRowHeight = 0;
    self.tableView.estimatedSectionHeaderHeight = 0;
    self.tableView.estimatedSectionFooterHeight = 0;
예상 높이 닫 기.
총결산
iOS 목록 에서 데 이 터 를 부 드 럽 게 불 러 오 는 문제 해결 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 iOS 목록 에서 데 이 터 를 자동 으로 불 러 오 는 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많이 응원 해 주세요!

좋은 웹페이지 즐겨찾기