美文网首页iOS OC 学习手册程序员iOS Developer
iOS开发中几个常用的工具类的简单封装

iOS开发中几个常用的工具类的简单封装

作者: APP叫我取个帅气的昵称 | 来源:发表于2016-12-12 14:27 被阅读1355次

    一.UILabel,UIButton, UIImageView ,UIAlertController的封装

    新建一个类,.h文件代码如下:

    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    @interface ZlmUI : NSObject
    //UILabel
    +(UILabel*)createLabelWithFram:(CGRect)cg andFont:(CGFloat)font andTextalignment:(NSInteger)alignment andTextColor:(UIColor *)color andText:(NSString *)text;
    //UIImageView
    +(UIImageView *)createImageViewWithFram:(CGRect)cg andImageName:(NSString *)name;
    //UIButton
    +(UIButton *)createButtonWithFram:(CGRect)cg andTarget:(id)target andSelector:(SEL)sel andTitleColor:(UIColor *)color andBackGroundImage:(NSString *)name andTitle:(NSString *)text;
    // 弹框提示信息 自定义弹框
    +(void)alertWithTitle:(NSString *)title message:(NSString *)message buttonTitle:(NSArray *)buttonTitle confirm:(void(^)(void))ok cancel:(void(^)(void))cancel inController:(UIViewController *)controller;
    @end
    

    .m文件代码如下

    #import "ZlmUI.h"
    
    @implementation ZlmUI
    +(UILabel*)createLabelWithFram:(CGRect)cg andFont:(CGFloat)font andTextalignment:(NSInteger)alignment andTextColor:(UIColor *)color andText:(NSString *)text{
        UILabel *lable=[[UILabel alloc]init];
        lable.frame=cg;
        lable.font=[UIFont systemFontOfSize:font];
        lable.userInteractionEnabled=YES;
        lable.textAlignment=alignment;
        lable.textColor=color;
        lable.text=text;
        return lable;
    }
    +(UIImageView *)createImageViewWithFram:(CGRect)cg andImageName:(NSString *)name{
        UIImageView *imageV=[[UIImageView alloc]initWithFrame:cg];
        imageV.userInteractionEnabled=YES;
        imageV.image=[UIImage imageNamed:name];
        return imageV;
    }
    +(UIButton *)createButtonWithFram:(CGRect)cg andTarget:(id)target andSelector:(SEL)sel andTitleColor:(UIColor *)color andBackGroundImage:(NSString *)name andTitle:(NSString *)text{
        UIButton *bt = [UIButton buttonWithType:UIButtonTypeCustom];
        [bt addTarget:target action:sel forControlEvents:UIControlEventTouchUpInside];
        [bt setTitle:text forState:UIControlStateNormal];
        [bt setTitleColor:color forState:UIControlStateNormal];
        [bt setBackgroundImage:[UIImage imageNamed:name] forState:UIControlStateNormal];
        bt.frame=cg;
        return bt;
        
    }
    +(void)alertWithTitle:(NSString *)title message:(NSString *)message buttonTitle:(NSArray *)buttonTitle confirm:(void (^)(void))ok cancel:(void (^)(void))cancel inController:(UIViewController *)controller{
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
        
        NSString *str = buttonTitle[0];
        UIAlertAction *action = [UIAlertAction actionWithTitle:str style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            if (ok) {
                ok();//处理
            }
        }];
        [alertController addAction:action];
        
        str = buttonTitle[1];
        action = [UIAlertAction actionWithTitle:str style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            if (cancel) {
                cancel();//处理
            }
        }];
        [alertController addAction:action];
        
        
        [controller presentViewController:alertController animated:YES completion:nil];
    }
    
    @end
    

    二.OC AFNetworking3.0的封装

    新建一个类,.h文件代码如下:

    #import <Foundation/Foundation.h>
    #import "MJExtension.h"
    #import "NetworkConstant.h"
    
    typedef NS_ENUM(NSInteger, XSRequestType) {
        XSRequestTypeForm = 0,
        XSRequestTypeJSON = 1
    };
    
    typedef void (^SuccessAPIBlock)(id responseObject);//请求成功回调
    typedef void (^FailureAPIBlock)(NSError *error);//请求失败回调
    typedef void (^FormDataBlock)(id AFMultipartFormData);
    @interface XSAPIManager : NSObject
    
    + (instancetype)manager;
    
    // GET方法请求
    - (void)GET:(NSString *)URLString parameters:(id)parameters success:(SuccessAPIBlock)success failure:(FailureAPIBlock)failure;
    
    // POST方法请求
    - (void)POST:(NSString *)URLString requestType:(XSRequestType)type parameters:(id)parameters success:(SuccessAPIBlock)success failure:(FailureAPIBlock)failure;
    
    // DELETE
    - (void)DELETE:(NSString *)URLString parameters:(id)parameters success:(SuccessAPIBlock)success failure:(FailureAPIBlock)failure;
    
    //上传图片
    - (void)MemberPOST:(NSString *)URLString requestType:(XSRequestType)type parameters:(id)parameters constructingBodyWithBlock:(FormDataBlock)block success:(SuccessAPIBlock)success failure:(FailureAPIBlock)failure;
    @end
    
    

    .m文件代码如下

    #import "XSAPIManager.h"
    
    #import "AFNetworking.h"
    
    static XSAPIManager * _instance = nil;
    
    @interface XSAPIManager ()
    @property (strong, nonatomic, readonly) AFHTTPSessionManager *httpRequestManager;
    @end
    
    @implementation XSAPIManager
    
    @synthesize httpRequestManager = _httpRequestManager;
    
    #pragma mark - init
    + (instancetype)manager {
        return [[self alloc] init];
    }
    
    + (instancetype)allocWithZone:(struct _NSZone *)zone {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            _instance = [super allocWithZone:zone];
        });
        return _instance;
    }
    
    #pragma mark - public methods
    - (void)GET:(NSString *)URLString
            parameters:(id)parameters
            success:(SuccessAPIBlock)success
            failure:(FailureAPIBlock)failure {
        
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    
        NSLog(@"URLString = %@",URLString);
        NSLog(@"参数 = %@",parameters);
        
    
    
        [self.httpRequestManager GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            
            success(responseObject);
            NSLog(@"responseObject = %@",responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            NSLog(@"Error: %@", error);
            if(failure) {
                failure(error);
            }
        } ];
    }
    
    - (void)POST:(NSString *)URLString requestType:(XSRequestType)type parameters:(id)parameters success:(SuccessAPIBlock)success failure:(FailureAPIBlock)failure {
        
    
        NSLog(@"URLString = %@",URLString);
        NSLog(@"参数 = %@",parameters);
        
        
        if (type == XSRequestTypeJSON) {
            self.httpRequestManager.requestSerializer = [AFJSONRequestSerializer serializer];
        } else if (type == XSRequestTypeForm) {
            self.httpRequestManager.requestSerializer = [AFHTTPRequestSerializer serializer];
        }
        
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
        [self.httpRequestManager POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"responseObject = %@",responseObject);
            
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            
            success(responseObject);
    
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            NSLog(@"Error: %@", error);
            if(failure) {
                failure(error);
            }
    
        } ];
    }
    
    - (void)DELETE:(NSString *)URLString parameters:(id)parameters success:(SuccessAPIBlock)success failure:(FailureAPIBlock)failure {
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
        [self.httpRequestManager DELETE:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            
            success(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            NSLog(@"Error: %@", error);
            if(failure) {
                failure(error);
            }
        }];
    }
    //图片上传
    - (void)MemberPOST:(NSString *)URLString requestType:(XSRequestType)type parameters:(id)parameters constructingBodyWithBlock:(FormDataBlock)block success:(SuccessAPIBlock)success failure:(FailureAPIBlock)failure{
        
        NSLog(@"URLString = %@",URLString);
        NSLog(@"参数 = %@",parameters);
        
        if (type == XSRequestTypeJSON) {
            self.httpRequestManager.requestSerializer = [AFJSONRequestSerializer serializer];
        } else if (type == XSRequestTypeForm) {
            self.httpRequestManager.requestSerializer = [AFHTTPRequestSerializer serializer];
        }
        
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
        [self.httpRequestManager POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            block(formData);
        } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"responseObject = %@",responseObject);
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            
            success(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
            NSLog(@"Error: %@", error);
            if(failure) {
                failure(error);
            }
        }];
        
    }
    #pragma mark - getters and setters
    - (AFHTTPSessionManager *)httpRequestManager {
        if (!_httpRequestManager) {
            _httpRequestManager = [AFHTTPSessionManager manager];
            [_httpRequestManager.requestSerializer setValue:@"utf-8" forHTTPHeaderField:@"charset"];
            
            _httpRequestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/plain", nil];
        }
        return _httpRequestManager;
    }
    
    @end
    

    三.Swift Alamofire的封装

    Swift3.0系列之基于Alamofire4.0网络层封装

    相关文章

      网友评论

        本文标题:iOS开发中几个常用的工具类的简单封装

        本文链接:https://www.haomeiwen.com/subject/hkpmmttx.html