iOS第三方庫的基本使用

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

MJRefresh下拉刷新框架使用

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

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

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

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

注意:
1.每次上拉加載更多數據后,要結束刷新狀態,才能才次進行刷新
[weakSelf.centerTableView.mj_footer endRefreshing];

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



//上拉刷新數據
[self.appListTableView.mj_footer beginRefreshing];
//下拉加載數據
[self.appListTableView.mj_header beginRefreshing]

例:
block方法刷新數據,對數據傳值
  //上拉加載
    self.appListTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        //因為是上拉刷新,所有顯示數據的頁數都是第一頁,最新的數據
        weakSelf.currentPage = 1;

        //隱藏footer,在加載的過程中防止用戶下拉刷新,導致數據錯誤
        weakSelf.appListTableView.mj_footer.hidden = YES;
        //請求數據,自己設置的方法,導入第幾頁的第幾個數據,分類ID
        [weakSelf requestAllListWithPage:weakSelf.currentPage searchText:weakSelf.searchKeyWord categoryId:weakSelf.categoryId];
    }];
    
    //下拉刷新
    self.appListTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
         //在刷新的過程中需要防止用戶重復刷新,導致數據加載丟失
        
        weakSelf.currentPage++;
        // 隱藏header,在刷新的過程中防止用戶上拉加載,導致數據錯誤
        weakSelf.appListTableView.mj_header.hidden = YES;
        //請求數據,自己設置的方法,導入第幾頁的第幾個數據,分類ID
        [weakSelf requestAllListWithPage:weakSelf.currentPage searchText:weakSelf.searchKeyWord categoryId:weakSelf.categoryId];
    }];

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

//對請求的數據進行判斷,提示用戶數據全部請求完畢
  if (weakSelf.appListArray.count(請求數據的個數)>= totalCount(總數據的個數)  ){      
    // 提示用戶數據全部請求完畢
    [weakSelf.appListTableView.mj_footer endRefreshingWithNoMoreData];
    }else {
   // 當 當前請求的數據小于totalCount時(總數據的個數),重置footer的狀態
   //重置沒有更多的數據(消除沒有更多數據的狀態)
   [weakSelf.appListTableView.mj_footer resetNoMoreData];
  }

 對header的刷新進行文字設置
//先對創建MJRefreshNormalHeader 對象,在獲取MJRefreshNormalHeader 的屬性,進行文字設置
  MJRefreshNormalHeader * header = [MJRefreshNormalHeader headerWithRefreshingBlock

    [header setTitle:@"爺爺等得好辛苦,快來扶我" forState:MJRefreshStateIdle];
    [header setTitle:@"爺爺摔倒了" forState:MJRefreshStatePulling];
    [header setTitle:@"開開心心扶老爺爺" forState:MJRefreshStateRefreshing];

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

AFNetworking 請求網絡數據


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

1.先要創建對象
// 網絡請求
@property (nonatomic, strong) AFHTTPSessionManager * httpManager; 

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

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

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


    } 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 將數據轉化模型

1.第一步在模型類導入YYModel
@interface ZB_Model : NSObject <YYModel>

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


// 關聯JSON數據中的key和類中的屬性
// 字典中的key為屬性,value為JSON數據中的key
// 當屬性和JSON數據中的key不一致時會用到該方法,做映射
+ (NSDictionary *)modelCustomPropertyMapper
{
    return @{@"desc":@"description"};
}


// 當屬性中為數組時,需要關聯其他類,使得數組中存放該類的對象
// 字典中的key為當前類的屬性,value為要關聯的類的class
+ (NSDictionary *)modelContainerPropertyGenericClass
{
    return @{@"applications" : [SubjectAppModel class]};
}


Masonry 建立約束

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

//先關閉以前的約束
self.automaticallyAdjustsScrollViewInsets = NO;

//appListTableViewd的X,Y,寬,高等于當前的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);

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


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

SDWebImage使用方法

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

SDWebImage 網絡獲取圖片

需要導入UIImageView+WebCache.h頭文件
[ImageView sd_setImageWithURL:[NSURL URLWithString:圖片網絡獲取地址] placeholderImage:[占位圖]];

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

SDWebImage 清除圖片緩存

導入頭文件#import <SDImageCache.h>
// 獲取緩存信息
// 獲取緩存的圖片數量
    NSInteger imageCount = [[SDImageCache sharedImageCache] getDiskCount];
  // 獲取緩存的圖片大小
    NSUInteger imageSize = [[SDImageCache sharedImageCache] getSize]; // 單位:字節
    NSString * msg = [NSString stringWithFormat:@"緩存文件個數:%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];

內容警告清除緩存

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
    // 清除內存緩存
    [[SDWebImageManager sharedManager].imageCache clearMemory];
    // 取消所有下載
    [[SDWebImageManager sharedManager] cancelAll];
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,172評論 4 61
  • 《冬吳相對論》的吳伯凡說:幸福是一種能力。 那么快樂也是一種能力。 有能力讓自己快樂的女人令人心生羨慕,有能力讓別...
    努力攢錢的二花閱讀 1,616評論 3 9
  • public class MergeSort { }
    Green_Apple閱讀 269評論 0 0
  • 又是給粉色控美女做的兩個包,一大一小~上細節圖 雖然只是簡單的包包,但是每個細節都不能馬虎,所需要的圖案都是從大塊...
    拼布童話閱讀 814評論 2 2
  • 因為上個手機掉廁所了,所以不得不買了現在這個新手機。補辦卡的話一弄就是4G網的,很耗流量,沒用幾天就幾百兆流量出去...
    愛別離琛妮妮閱讀 201評論 0 0