iOS OC 学习手册程序员iOS Developer

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

2016-12-12  本文已影响1355人  APP叫我取个帅气的昵称

一.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网络层封装

上一篇下一篇

猜你喜欢

热点阅读