SVPullToRefresh使用

iOS中許多頁面都是tableView耳鸯,而不少tableView都需要提供下拉刷新、上拉加載等功能膀曾。MJRefresh和SVPullToRefresh是兩個很好的第三方刷新控件县爬。這里大概寫一下自己利用SVPullToRefresh實現(xiàn)下拉刷新、上拉加載功能步驟添谊。

  • 創(chuàng)建tableView
- (CardTableView *)tableView
{
    if (!_tableView) {
        _tableView = [[CardTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
        _tableView.backgroundColor = [UIColor whiteColor];
        _tableView.clickCellDelegate = self;
        _tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
        _tableView.scrollIndicatorInsets = UIEdgeInsetsMake(64, 0, 0, 0);
    }
    return _tableView;
}

PS: 當你導航欄為半透明模糊風格時财喳,contentInset和scrollIndicatorInsets屬性你可能用的到

  • viewDidLoad
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    self.title = @"帖子";
    self.view.backgroundColor = [UIColor whiteColor];
    
    self.automaticallyAdjustsScrollViewInsets = NO;//取消自動偏移
    self.loadMoreIndex = 0;
    self.isFirstLoad = YES;
    
    [self setupUI];//布局tableView方法
    [self setupErrorUI];//布局錯誤頁面方法
    
    [self contentRefresh];//下拉刷新方法
    [self contentLoadMore];//上拉加載方法
    
    [self firstLoadData];//首次加載數(shù)據(jù)方法
    
}
#pragma mark -首次加載數(shù)據(jù)
- (void)firstLoadData
{
    self.currentIndex = 1;
    [self requestMyCardListData];
}

#pragma mark -下拉刷新
- (void)contentRefresh
{
    __weak typeof(self) weakSelf = self;
    
    [self.tableView addPullToRefreshWithActionHandler:^{
        __strong typeof(weakSelf) sself = weakSelf;
        
        sself.loadMoreIndex = 0;
        sself.currentIndex = 1;
        [sself requestMyCardListData];
    }];
    
}

#pragma mark -上拉加載
- (void)contentLoadMore
{
    __weak typeof(self) weakSelf = self;
    [self.tableView addInfiniteScrollingWithActionHandler:^{
        
        __strong typeof(weakSelf) sself = weakSelf;
        
        sself.loadMoreIndex ++;
        [sself requestMyCardListData];
    }];
}

//tableView約束

[self.view addSubview:self.tableView];
    [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.leading.and.trailing.equalTo(@0);
        make.top.equalTo(self.mas_topLayoutGuideTop);
        make.bottom.equalTo(self.mas_bottomLayoutGuideTop);
    }];
  • 數(shù)據(jù): 這里模擬網(wǎng)絡(luò)請求
- (void)requestMyCardListData
{
    //模擬網(wǎng)路請求
    MBProgressHUD *hud;
    if (self.isFirstLoad) {
        hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    }
    __weak typeof(self) weakSelf = self;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
        __strong typeof(weakSelf) sself = weakSelf;
        
        if (sself.isFirstLoad) {
            [hud hideAnimated:YES];
        }
        
        BOOL isSuccess = YES;
        if (isSuccess) {//請求成功
            
            sself.isFirstLoad = NO;
            
            if (sself.currentIndex == 1) {//下拉
                [sself.dataArray removeAllObjects];
                sself.tableView.showsInfiniteScrolling = YES;
            }
            
            sself.currentIndex += 1;
            
            NSInteger dataNum = 10;
            if (sself.loadMoreIndex == 2) {
                dataNum = 3;
            }
            
            NSMutableArray *array = [NSMutableArray array];
            for (int i = 0; i < dataNum; i ++) {
                CardModel *model = [[CardModel alloc] init];
                model.cardContent = [NSString stringWithFormat:@"內(nèi)容%d", i];
                model.color = i;
                model.day = i + 2;
                model.month = i + 1;
                [array addObject:model];
            }
            
            [sself.dataArray addObjectsFromArray:array];
            
            sself.tableView.dataArray = sself.dataArray;
            [sself.tableView reloadData];
            
            if (sself.dataArray.count == 0) {
                sself.myErrorView.hidden = NO;
                sself.tableView.hidden = YES;
                sself.myErrorView.userInteractionEnabled = NO;
                
                sself.myErrorLabel.text = @"還沒有發(fā)帖哦!";
                sself.myErrorBotLabel.hidden = YES;
            }else {
                sself.myErrorView.hidden = YES;
                sself.tableView.hidden = NO;
            }
            
            if (array.count < kPageSize) {//數(shù)據(jù)不足一頁時 不顯示上拉控件
                sself.tableView.showsInfiniteScrolling = NO;
            }
            
        }else {//error
            
            if (sself.dataArray.count > 0) {//如果已經(jīng)有數(shù)據(jù) 錯誤提示
                sself.myErrorView.hidden = YES;
                sself.tableView.hidden = NO;
                
                //提示
                MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:sself.view animated:YES];
                [hud hideAnimated:YES afterDelay:2];
            }else {//沒數(shù)據(jù) 錯誤頁面 -點擊重試
                sself.myErrorView.hidden = NO;
                sself.tableView.hidden = YES;
                sself.myErrorView.userInteractionEnabled = YES;
                sself.myErrorLabel.text = @"頁面加載失敗";
                sself.myErrorBotLabel.hidden = NO;
            }
        }
        
        [sself.tableView.pullToRefreshView stopAnimating];
        [sself.tableView.infiniteScrollingView stopAnimating];
        
    });
}

PS: 每次下拉 成功回調(diào)顯示上拉加載控件(因為暫時不知是否還有數(shù)據(jù)), 頁碼增加: sself.currentIndex += 1; 判斷每次加載得到的數(shù)據(jù)是否夠一頁的數(shù)據(jù),若不足一頁數(shù)據(jù)則說明數(shù)據(jù)加載完畢斩狱,不顯示上拉控件纲缓;最后 結(jié)束下拉或上拉

另外,需要注意的是喊废,需要先reload 然后再隱藏上拉加載控件祝高,否則上拉成功后, 頁面會向下滑動一定距離污筷,新加載出來的數(shù)據(jù)不顯示在可視頁面上工闺,需要手動上拉才顯示

即:

[sself.tableView reloadData];//reloadData在tableView.showsInfiniteScrolling前面執(zhí)行

sself.tableView.showsInfiniteScrolling = NO;

若reloadData在隱藏上拉加載控件后執(zhí)行效果:

后reloadData.gif

當?shù)诙紊侠瓟?shù)據(jù)成功后 頁面向下滑動了一段距離 新加載的數(shù)據(jù)未顯示在可視頁面上

先reloadData然后隱藏上拉控件:

先reloadData后隱藏上拉控件.gif

代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瓣蛀,隨后出現(xiàn)的幾起案子陆蟆,更是在濱河造成了極大的恐慌,老刑警劉巖惋增,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叠殷,死亡現(xiàn)場離奇詭異,居然都是意外死亡诈皿,警方通過查閱死者的電腦和手機林束,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稽亏,“玉大人壶冒,你說我怎么就攤上這事〗厍福” “怎么了胖腾?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我咸作,道長锨阿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任记罚,我火速辦了婚禮墅诡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毫胜。我一直安慰自己书斜,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布酵使。 她就那樣靜靜地躺著荐吉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪口渔。 梳的紋絲不亂的頭發(fā)上样屠,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音缺脉,去河邊找鬼痪欲。 笑死,一個胖子當著我的面吹牛攻礼,可吹牛的內(nèi)容都是我干的业踢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼礁扮,長吁一口氣:“原來是場噩夢啊……” “哼知举!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起太伊,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤雇锡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后僚焦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锰提,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年芳悲,在試婚紗的時候發(fā)現(xiàn)自己被綠了立肘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡芭概,死狀恐怖赛不,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罢洲,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站惹苗,受9級特大地震影響殿较,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桩蓉,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一淋纲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧院究,春花似錦洽瞬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至样漆,卻和暖如春为障,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背放祟。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工鳍怨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跪妥。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓鞋喇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眉撵。 傳聞我的和親對象是個殘疾皇子侦香,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • 一個人在對另一個人產(chǎn)生芥蒂的時候执桌,這個芥蒂就會越來越深鄙皇,并永遠不能說服。
    痞子的幸福白羊閱讀 102評論 0 0
  • 電話上說仰挣,他的車需要維護伴逸,于是他下山了,一會兒就到城里膘壶,說好在林業(yè)局門口错蝴,下了公交的地方見面。 她看見他時颓芭,他正站...
    花雨鳳飛H閱讀 524評論 1 5
  • 馬克—克羅恩氏病的自身免疫性疾病顷锰,并發(fā)芽胞桿菌感染。12歲的孩子亡问,使用200mg的強的松和一些抗生素與鎮(zhèn)痛劑慢慢轉(zhuǎn)...
    精彩遇見閱讀 1,198評論 0 1