iOS第三方庫的基本使用

自動處理鍵盤事件的第三方庫 IQKeyboardManager

MJRefresh下拉刷新框架使用

MJRefresh–用法最簡單的下拉刷新框架

MJRefresh 下拉刷新孵睬,上拉加載的控件

提示:在block中使用self中的屬性醒颖、成員變量方法需要使用弱引用
__weak __weak typeof(self) weakSelf = self;

//導(dǎo)入
#import <MJRefresh.h>
/** 創(chuàng)建header Blockf方法 */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** 創(chuàng)建header  調(diào)用方法SEL*/
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
//這個方法刷新時沒有footer的文字膀藐,直接刷新
tableView.mj_footer = [MJRefreshAutoFooter footerWithRefreshingBlock

注意:
1.每次上拉加載更多數(shù)據(jù)后,要結(jié)束刷新狀態(tài)减响,才能才次進(jìn)行刷新
[weakSelf.centerTableView.mj_footer endRefreshing];

2.在刷新的過程中需要防止用戶重復(fù)刷新,否則會導(dǎo)致數(shù)據(jù)加載丟失
 // 在數(shù)據(jù)獲取失敗的地方減少頁數(shù)
        if (weakSelf.currentPage > 1) {
            weakSelf.currentPage--;
         }



//上拉刷新數(shù)據(jù)
[self.appListTableView.mj_footer beginRefreshing];
//下拉加載數(shù)據(jù)
[self.appListTableView.mj_header beginRefreshing]

例:
block方法刷新數(shù)據(jù),對數(shù)據(jù)傳值
  //上拉加載
    self.appListTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        //因?yàn)槭巧侠⑿拢酗@示數(shù)據(jù)的頁數(shù)都是第一頁竹椒,最新的數(shù)據(jù)
        weakSelf.currentPage = 1;

        //隱藏footer,在加載的過程中防止用戶下拉刷新米辐,導(dǎo)致數(shù)據(jù)錯誤
        weakSelf.appListTableView.mj_footer.hidden = YES;
        //請求數(shù)據(jù),自己設(shè)置的方法书释,導(dǎo)入第幾頁的第幾個數(shù)據(jù)翘贮,分類ID
        [weakSelf requestAllListWithPage:weakSelf.currentPage searchText:weakSelf.searchKeyWord categoryId:weakSelf.categoryId];
    }];
    
    //下拉刷新
    self.appListTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
         //在刷新的過程中需要防止用戶重復(fù)刷新,導(dǎo)致數(shù)據(jù)加載丟失
        
        weakSelf.currentPage++;
        // 隱藏header爆惧,在刷新的過程中防止用戶上拉加載狸页,導(dǎo)致數(shù)據(jù)錯誤
        weakSelf.appListTableView.mj_header.hidden = YES;
        //請求數(shù)據(jù),自己設(shè)置的方法扯再,導(dǎo)入第幾頁的第幾個數(shù)據(jù)芍耘,分類ID
        [weakSelf requestAllListWithPage:weakSelf.currentPage searchText:weakSelf.searchKeyWord categoryId:weakSelf.categoryId];
    }];

  
  數(shù)據(jù)加載成功后需要:
  //結(jié)束下拉加載數(shù)據(jù)
  [weakSelf.appListTableView.mj_header endRefreshing];
  //結(jié)束上拉刷新數(shù)據(jù)
  [weakSelf.appListTableView.mj_footer endRefreshing];
  //取消對上拉和下拉的隱藏,讓用戶可以繼續(xù)刷新數(shù)據(jù)        
   weakSelf.appListTableView.mj_header.hidden = NO;
   weakSelf.appListTableView.mj_footer.hidden = NO;

//對請求的數(shù)據(jù)進(jìn)行判斷熄阻,提示用戶數(shù)據(jù)全部請求完畢
  if (weakSelf.appListArray.count(請求數(shù)據(jù)的個數(shù))>= totalCount(總數(shù)據(jù)的個數(shù))  ){      
    // 提示用戶數(shù)據(jù)全部請求完畢
    [weakSelf.appListTableView.mj_footer endRefreshingWithNoMoreData];
    }else {
   // 當(dāng) 當(dāng)前請求的數(shù)據(jù)小于totalCount時(總數(shù)據(jù)的個數(shù))斋竞,重置footer的狀態(tài)
   //重置沒有更多的數(shù)據(jù)(消除沒有更多數(shù)據(jù)的狀態(tài))
   [weakSelf.appListTableView.mj_footer resetNoMoreData];
  }

 對header的刷新進(jìn)行文字設(shè)置
//先對創(chuàng)建MJRefreshNormalHeader 對象,在獲取MJRefreshNormalHeader 的屬性秃殉,進(jìn)行文字設(shè)置
  MJRefreshNormalHeader * header = [MJRefreshNormalHeader headerWithRefreshingBlock

    [header setTitle:@"爺爺?shù)鹊煤眯量喟映酰靵矸鑫? forState:MJRefreshStateIdle];
    [header setTitle:@"爺爺摔倒了" forState:MJRefreshStatePulling];
    [header setTitle:@"開開心心扶老爺爺" forState:MJRefreshStateRefreshing];

//最后千萬別忘記, 設(shè)置要刷新的對象
  subjectTableView.mj_header = header
//開始加載數(shù)據(jù)
[_subjectTableView.mj_header beginRefreshing]

AFNetworking 請求網(wǎng)絡(luò)數(shù)據(jù)


// 結(jié)束之前的所有請求
[self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
//取消AFNetworking的所有任務(wù)钾军,使不可用
[self.manager invalidateSessionCancelingTasks:YES];

1.先要創(chuàng)建對象
// 網(wǎng)絡(luò)請求
@property (nonatomic, strong) AFHTTPSessionManager * httpManager; 

//響應(yīng)JSON數(shù)據(jù)
- (AFHTTPSessionManager *)httpManager
{
    if (!_httpManager) {
        _httpManager = [AFHTTPSessionManager manager];
        // 設(shè)置JSON數(shù)據(jù)序列化鳄袍,將JSON數(shù)據(jù)轉(zhuǎn)換為字典或者數(shù)組
        _httpManager.responseSerializer = [AFJSONResponseSerializer serializer];
        // 在序列化器中追加一個類型,text/html這個類型是不支持的吏恭,text/json, application/json
        _httpManager.responseSerializer.acceptableContentTypes = [_httpManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
    }
    return _httpManager;
}

//請求 JSON數(shù)據(jù) requestSerializer
 if (!_afHttpMagaer) {
        
        _afHttpMagaer = [AFHTTPSessionManager manager];

          //請求JSON數(shù)據(jù)(requestSerializer)
        _afHttpMagaer.requestSerializer = [AFJSONRequestSerializer
                                            serializer];
        // 在序列化器中追加一個類型拗小,text/html這個類型是不支持的,text/json, application/json
        _afHttpMagaer.responseSerializer.acceptableContentTypes = [_afHttpMagaer.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
        
    }
//請求GET數(shù)據(jù)
 [self.httpManager GET:(NSString *請求數(shù)據(jù)) parameters:(id一般寫nil) success:^(NSURLSessionDataTask *task任務(wù), id responseObject返回的數(shù)據(jù)) {
        請求成功會到這里
        
        在block中使用self中的屬性樱哼、成員變量方法需要使用弱引用
        __weak __weak typeof(self) weakSelf = self;
         dispatch_async(dispatch_get_main_queue(), ^{
         
          // 不要忘記刷新數(shù)據(jù) UITableView
            [weakSelf.appListTableView reloadData];
         
         [weakSelf.appListTableView reloadData];
            //數(shù)據(jù)請求成功后哀九,要返回主線程對UI界面進(jìn)行賦值
        });


    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        請求失敗回到這里
    }];

//POST請求
//如果請求是字典中包含字典
{
    "record": {
        "page": 1
    }
}
//需要這樣寫:
  NSDictionary *dict1=@{@"page":@1};
  NSDictionary *dic2=@{@"record":dict1};
//或者這樣寫
  NSDictionary *dd = @{@"record":@{@"page":@1}};


  NSString *url = @"http://life.fotile.com/fotileApp/course/getRecipeList";
    [self.afHttpMagaer POST:url parameters:dic2 progress:^(NSProgress * _Nonnull uploadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        ZBLog(@"美食=%@", responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        ZBLog(@"%@", error.localizedDescription);
        
    }];


YYModel 將數(shù)據(jù)轉(zhuǎn)化模型

1.第一步在模型類導(dǎo)入YYModel
@interface ZB_Model : NSObject <YYModel>

2.將數(shù)據(jù)轉(zhuǎn)化為數(shù)組/模型
   yy_modelArrayWithClass 要轉(zhuǎn)化的數(shù)組類型
   json 需要轉(zhuǎn)換成模型的json數(shù)據(jù)
  NSArray *appModelArray = [NSArray yy_modelArrayWithClass:[ZB_Model class] json:appArray];
  
  NSDictionary *appModelArray = [NSDictionary yy_modelDictionaryWithClass:<#(__unsafe_unretained Class)#> json:<#(id)#>]
  


// 關(guān)聯(lián)JSON數(shù)據(jù)中的key和類中的屬性
// 字典中的key為屬性,value為JSON數(shù)據(jù)中的key
// 當(dāng)屬性和JSON數(shù)據(jù)中的key不一致時會用到該方法搅幅,做映射
+ (NSDictionary *)modelCustomPropertyMapper
{
    return @{@"desc":@"description"};
}


// 當(dāng)屬性中為數(shù)組時勾栗,需要關(guān)聯(lián)其他類,使得數(shù)組中存放該類的對象
// 字典中的key為當(dāng)前類的屬性盏筐,value為要關(guān)聯(lián)的類的class
+ (NSDictionary *)modelContainerPropertyGenericClass
{
    return @{@"applications" : [SubjectAppModel class]};
}


Masonry 建立約束

http://adad184.com/2014/09/28/use-masonry-to-quick-solve-autolayout/

//先關(guān)閉以前的約束
self.automaticallyAdjustsScrollViewInsets = NO;

//appListTableViewd的X,Y,寬,高等于當(dāng)前的View
[self.appListTableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(weakSelf.view);
    }];



  [self.coverImage mas_makeConstraints:^(MASConstraintMaker *make) {
       
        make.top.mas_equalTo(weakSelf.backgroundV.mas_top).offset(5);
        make.left.mas_equalTo(weakSelf.backgroundV.mas_left).offset(5);
        make.right.mas_equalTo(weakSelf.backgroundV.mas_right).offset(-5);

        //高為寬的倍數(shù)
       make.height.mas_equalTo(weakSelf.coverImage.mas_width).multipliedBy(301/345.0f);
        
    }];


   更新約束
    // 告訴self.view約束需要更新
    [self.view setNeedsUpdateConstraints];
    // 調(diào)用此方法告訴self.view檢測是否需要更新約束围俘,若需要則更新
    [self.view updateConstraintsIfNeeded];    
    [self.view layoutIfNeeded];

SDWebImage使用方法

http://www.reibang.com/p/4191017c8b39/comments/1566836

SDWebImage 網(wǎng)絡(luò)獲取圖片

需要導(dǎo)入UIImageView+WebCache.h頭文件
[ImageView sd_setImageWithURL:[NSURL URLWithString:圖片網(wǎng)絡(luò)獲取地址] placeholderImage:[占位圖]];

獲取下載的圖片
- (id <SDWebImageOperation>)downloadImageWithURL:(NSURL *)url options:(SDWebImageDownloaderOptions)options
                                        progress:(SDWebImageDownloaderProgressBlock)progressBlock
                                       completed:(SDWebImageDownloaderCompletedBlock)completedBlock;

SDWebImage 清除圖片緩存

導(dǎo)入頭文件#import <SDImageCache.h>
// 獲取緩存信息
// 獲取緩存的圖片數(shù)量
    NSInteger imageCount = [[SDImageCache sharedImageCache] getDiskCount];
  // 獲取緩存的圖片大小
    NSUInteger imageSize = [[SDImageCache sharedImageCache] getSize]; // 單位:字節(jié)
    NSString * msg = [NSString stringWithFormat:@"緩存文件個數(shù):%ld,大小:%.2fM界牡,是否清除簿寂?", imageCount, (imageSize/1024.0)/1024.0];
        
// 清除緩存
    UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"清除緩存" message:msg preferredStyle:UIAlertControllerStyleAlert];
 // 添加AlertAction
 // 取消按鈕
    UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
    [alertController dismissViewControllerAnimated:YES completion:nil];
       }];
// 清除按鈕
    UIAlertAction * okAction = [UIAlertAction actionWithTitle:@"清除" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *  action) {
// 清除緩存
     [[SDImageCache sharedImageCache] clearDisk];
     [[SDImageCache sharedImageCache] clearMemory];
 // 清除已過期的圖片
     [[SDImageCache sharedImageCache] cleanDisk];
        }];
        
// 將Action添加到AlertController中
     [alertController addAction:cancelAction];
     [alertController addAction:okAction];
     [self presentViewController:alertController animated:YES completion:nil];

內(nèi)容警告清除緩存

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    // 清除內(nèi)存緩存
    [[SDWebImageManager sharedManager].imageCache clearMemory];
    // 取消所有下載
    [[SDWebImageManager sharedManager] cancelAll];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宿亡,隨后出現(xiàn)的幾起案子常遂,更是在濱河造成了極大的恐慌,老刑警劉巖挽荠,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件克胳,死亡現(xiàn)場離奇詭異,居然都是意外死亡圈匆,警方通過查閱死者的電腦和手機(jī)漠另,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跃赚,“玉大人笆搓,你說我怎么就攤上這事∥嘲粒” “怎么了满败?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叹括。 經(jīng)常有香客問我算墨,道長,這世上最難降的妖魔是什么汁雷? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任米同,我火速辦了婚禮,結(jié)果婚禮上摔竿,老公的妹妹穿的比我還像新娘面粮。我一直安慰自己,他們只是感情好继低,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布熬苍。 她就那樣靜靜地躺著,像睡著了一般袁翁。 火紅的嫁衣襯著肌膚如雪柴底。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天粱胜,我揣著相機(jī)與錄音柄驻,去河邊找鬼。 笑死焙压,一個胖子當(dāng)著我的面吹牛鸿脓,可吹牛的內(nèi)容都是我干的抑钟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼野哭,長吁一口氣:“原來是場噩夢啊……” “哼在塔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拨黔,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蛔溃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后篱蝇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贺待,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年零截,在試婚紗的時候發(fā)現(xiàn)自己被綠了麸塞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞻润,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甜刻,到底是詐尸還是另有隱情绍撞,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布得院,位于F島的核電站傻铣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祥绞。R本人自食惡果不足惜非洲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜕径。 院中可真熱鬧两踏,春花似錦、人聲如沸兜喻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朴皆。三九已至帕识,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遂铡,已是汗流浹背肮疗。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扒接,地道東北人伪货。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓们衙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親超歌。 傳聞我的和親對象是個殘疾皇子砍艾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件巍举、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 《冬吳相對論》的吳伯凡說:幸福是一種能力脆荷。 那么快樂也是一種能力。 有能力讓自己快樂的女人令人心生羨慕懊悯,有能力讓別...
    努力攢錢的二花閱讀 1,588評論 3 9
  • public class MergeSort { }
    Green_Apple閱讀 262評論 0 0
  • 又是給粉色控美女做的兩個包,一大一小~上細(xì)節(jié)圖 雖然只是簡單的包包炭分,但是每個細(xì)節(jié)都不能馬虎桃焕,所需要的圖案都是從大塊...
    拼布童話閱讀 778評論 2 2
  • 因?yàn)樯蟼€手機(jī)掉廁所了,所以不得不買了現(xiàn)在這個新手機(jī)捧毛。補(bǔ)辦卡的話一弄就是4G網(wǎng)的,很耗流量呀忧,沒用幾天就幾百兆流量出去...
    愛別離琛妮妮閱讀 197評論 0 0