封装的常用方法

1.常用控件方法的封装:

#import

#import

@interfaceMyUtil :NSObject

//创建标签的方法

+ (UILabel*)createLabelFrame:(CGRect)frame text:(NSString*)text textColor:(UIColor*)textColor textAlignment:(NSTextAlignment)textAlignment numberOfLines:(NSInteger)numberOfLines;

+ (UILabel*)createLabelFrame:(CGRect)frame text:(NSString*)text color:(UIColor*)textColor;

//创建按钮的方法

+ (UIButton*)createBtnFrame:(CGRect)frame title:(NSString*)title bgImageName:(NSString*)bgImageName target:(id)target action:(SEL)action;

//创建图片视图的方法

+ (UIImageView*)createImageViewFrame:(CGRect)frame imageName:(NSString*)imageName;

//类型的英文转化成中文

+ (NSString*)transferCateName:(NSString*)name;

@end

方法的实现:

#import"MyUtil.h"

@implementationMyUtil

+(UILabel*)createLabelFrame:(CGRect)frame text:(NSString*)text textColor:(UIColor*)textColor textAlignment:(NSTextAlignment)textAlignment numberOfLines:(NSInteger)numberOfLines

{

UILabel*label = [[UILabelalloc]initWithFrame:frame];

label.text= text;

label.textAlignment= textAlignment;

label.textColor= textColor;

label.numberOfLines= numberOfLines;

returnlabel;

}

+(UILabel*)createLabelFrame:(CGRect)frame text:(NSString*)text color:(UIColor*)textColor

{

return[selfcreateLabelFrame:frametext:texttextColor:textColortextAlignment:NSTextAlignmentCenternumberOfLines:1];

}

+(UIButton*)createBtnFrame:(CGRect)frame title:(NSString*)title bgImageName:(NSString*)bgImageName target:(id)target action:(SEL)action

{

UIButton*btn = [UIButtonbuttonWithType:UIButtonTypeCustom];

btn.frame= frame;

[btnsetTitle:titleforState:UIControlStateNormal];

[btnsetTitleColor:[UIColorblackColor]forState:UIControlStateNormal];

[btnsetBackgroundImage:[UIImageimageNamed:bgImageName]forState:UIControlStateNormal];

[btnaddTarget:targetaction:actionforControlEvents:UIControlEventTouchUpInside];

returnbtn;

}

+(UIImageView*)createImageViewFrame:(CGRect)frame imageName:(NSString*)imageName

{

UIImageView*imageView = [[UIImageViewalloc]initWithFrame:frame];

imageView.image= [UIImageimageNamed:imageName];

returnimageView;

}

+ (NSString*)transferCateName:(NSString*)name

{

if([nameisEqualToString:@"Business"]) {

return@"商业";

}elseif([nameisEqualToString:@"Weather"]) {

return@"天气";

}elseif([nameisEqualToString:@"Tool"]) {

return@"工具";

}elseif([nameisEqualToString:@"Travel"]) {

return@"旅行";

}elseif([nameisEqualToString:@"Sports"]) {

return@"体育";

}elseif([nameisEqualToString:@"Social"]) {

return@"社交";

}elseif([nameisEqualToString:@"Refer"]) {

return@"参考";

}elseif([nameisEqualToString:@"Ability"]) {

return@"效率";

}elseif([nameisEqualToString:@"Photography"]) {

return@"摄影";

}elseif([nameisEqualToString:@"News"]) {

return@"新闻";

}elseif([nameisEqualToString:@"Gps"]) {

return@"导航";

}elseif([nameisEqualToString:@"Music"]) {

return@"音乐";

}elseif([nameisEqualToString:@"Life"]) {

return@"生活";

}elseif([nameisEqualToString:@"Health"]) {

return@"健康";

}elseif([nameisEqualToString:@"Finance"]) {

return@"财务";

}elseif([nameisEqualToString:@"Pastime"]) {

return@"娱乐";

}elseif([nameisEqualToString:@"Education"]) {

return@"教育";

}elseif([nameisEqualToString:@"Book"]) {

return@"书籍";

}elseif([nameisEqualToString:@"Medical"]) {

return@"医疗";

}elseif([nameisEqualToString:@"Catalogs"]) {

return@"商品指南";

}elseif([nameisEqualToString:@"FoodDrink"]) {

return@"美食";

}elseif([nameisEqualToString:@"Game"]) {

return@"游戏";

}elseif([nameisEqualToString:@"All"]){

return@"全部";

}

returnnil;

}

@end

2.裁剪图片方法的封装:

- (UIImage*)clipImage:(UIImage*)bigImage inRect:(CGRect)rect

{

CGImageRefimageRef =CGImageCreateWithImageInRect(bigImage.CGImage, rect);

UIImage*image = [UIImageimageWithCGImage:imageRef];

returnimage;

}

实现方法:

//创建图片显示

CGRectframe =CGRectMake(100*j,100*i,100,100);

UIImage*tmpImage = [selfclipImage:imageinRect:frame];

3.封装的下载方法:

#import

@classMyDownloader;

@protocolMyDownloaderDelegate

- (void)downloadFail:(MyDownloader*)downloader error:(NSError*)error;

- (void)downloadFinish:(MyDownloader*)downloader;

@end

@interfaceMyDownloader :NSObject

- (void)downloadWithURLString:(NSString*)urlString;

@property(nonatomic,readonly)NSData*receiveData;

@property(nonatomic,assign)NSIntegertype;

@property(nonatomic,weak)id delegate;

@end

实现方法:

#import"MyDownloader.h"

@implementationMyDownloader

{

NSURLConnection*_conn;

NSMutableData*_receiveData;

}

-(instancetype)init

{

self= [superinit];

if(self) {

_receiveData= [NSMutableDatadata];

}

returnself;

}

-(void)downloadWithURLString:(NSString*)urlString

{

NSURL*url = [NSURLURLWithString:urlString];

NSURLRequest*request = [NSURLRequestrequestWithURL:url];

_conn= [NSURLConnectionconnectionWithRequest:requestdelegate:self];

}

#pragma mark - NSURLConnection代理

-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error

{

[self.delegatedownloadFail:selferror:error];

}

-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response

{

[_receiveDatasetLength:0];

}

-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data

{

[_receiveDataappendData:data];

}

-(void)connectionDidFinishLoading:(NSURLConnection*)connection

{

[self.delegatedownloadFinish:self];

}

4.block封装的下载方法:

#import

typedefvoid(^FINISHBLOCK)(NSData*receiveData);

typedefvoid(^FAILBLOCK)(NSError*error);

@interfaceMyDownloader :NSObject

{

NSMutableData*_receiveData;

NSURLConnection*_conn;

//下载成功结束

//void (^_myFinishBlock)(NSData *data);

FINISHBLOCK_myFinishBlock;

//下载失败时调用

//void (^_myFailBlock)(NSError *error);

FAILBLOCK_myFailBlock;

}

//下载的方法

/*

@param urlString:下载的字符串链接

@param finishBlock:下载成功时调用的代码块

@param failBlock:下载失败时调用的代码块

*/

/*

- (void)downloadWithURLString:(NSString *)urlString

finish:(void (^) (NSData *receiveData))finishBlock

fail:(void (^)(NSError *error))failBlock;

*/

- (void)downloadWithURLString:(NSString*)urlString

finish:(FINISHBLOCK)finishBlock

fail:(FAILBLOCK)failBlock;

@end

实现方法:

#import"MyDownloader.h"

@implementationMyDownloader

-(instancetype)init

{

if(self= [superinit]) {

_receiveData= [NSMutableDatadata];

}

returnself;

}

-(void)downloadWithURLString:(NSString*)urlString finish:(void(^)(NSData*))finishBlock fail:(void(^)(NSError*))failBlock

{

if(_myFinishBlock!= finishBlock) {

_myFinishBlock= finishBlock;

}

if(_myFailBlock!= failBlock) {

_myFailBlock= failBlock;

}

//下载

NSURL*url = [NSURLURLWithString:urlString];

NSURLRequest*request = [NSURLRequestrequestWithURL:url];

_conn= [NSURLConnectionconnectionWithRequest:requestdelegate:self];

}

#pragma mark - NSURLConnection代理

-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error

{

if(_myFailBlock) {

_myFailBlock(error);

}

}

-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response

{

[_receiveDatasetLength:0];

}

-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data

{

[_receiveDataappendData:data];

}

-(void)connectionDidFinishLoading:(NSURLConnection*)connection

{

if(_myFinishBlock) {

_myFinishBlock(_receiveData);

}

}

@end

5.数据库的封装:

#import

#import"UserModel.h"

@interfaceDBManager :NSObject

+ (DBManager*)sharedManager;

//增

- (void)addUserModel:(UserModel*)model;

//删

- (void)deleteUserWithUserId:(int)userId;

//改

//根据userId修改数据(userId是不变化的)

- (void)updateUserModel:(UserModel*)model userId:(int)userId;

//查

- (NSArray*)searchAllUsers;

@end

实现方法:

#import"DBManager.h"

#import"FMDatabase.h"

/*

使用数据库时

1.导入fmdatabase第三方库

2.导入系统libsqlite3.dylib

3.fmdatabase不支持ARC,五个.m文件添加-fno-objc-arc

*/

@implementationDBManager

{

//数据库文件的关联对象

FMDatabase*_dataBase;

}

+(DBManager*)sharedManager

{

staticDBManager*manager =nil;

@synchronized(self){

if(manager ==nil) {

manager = [[DBManageralloc]init];

}

}

returnmanager;

}

-(instancetype)init

{

if(self= [superinit]) {

//创建数据库文件操作对象

[selfcreateDatabase];

}

returnself;

}

- (void)createDatabase

{

//数据库文件的路径

NSString*path = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/user.sqlite"];

NSLog(@"%@",path);

//1、初始化FMDataBase对象

_dataBase= [[FMDatabasealloc]initWithPath:path];

//2、打开数据库

BOOLisOpen = [_dataBaseopen];

if(isOpen) {

//3、创建表格

//NSData -> blob

//int -> integer

//NSString -> varchar(255)

//if not exists:如果表格不存在,创建表格

//存在就不创建

//主键:primary key,值唯一,不能重复

//主键自动增长:autoincrement

NSString*createSql =@"create table if not exists user (userId integer primary key autoincrement, userName varchar(255), age integer,headImage blob)";

BOOLret = [_dataBaseexecuteUpdate:createSql];

if(ret) {

NSLog(@"表格创建成功");

}else{

NSLog(@"%@",_dataBase.lastErrorMessage);

}

}else{

NSLog(@"数据库打开失败");

}

}

//判断是否存在

- (BOOL)isExists:(NSString*)userName

{

NSString*sql =@"select * from user where userName = ?";

FMResultSet*rs = [_dataBaseexecuteQuery:sql, userName];

if([rsnext]) {

returnYES;

}

returnNO;

}

//增加一条记录

-(void)addUserModel:(UserModel*)model

{

//判断用户名是否存在

BOOLisExists = [selfisExists:model.userName];

if(isExists) {

NSLog(@"用户名已存在");

return;

}

//?是占位符,表示要传一个值

NSString*insertSql =@"insert into user (userName, age, headImage) values (?, ? ,?)";

//图片转换成二进制

NSData*imageData =UIImagePNGRepresentation(model.headImage);

BOOLret = [_dataBaseexecuteUpdate:insertSql,model.userName,@(model.age), imageData];

if(!ret) {

NSLog(@"%@",_dataBase.lastErrorMessage);

}

}

//查询

-(NSArray*)searchAllUsers

{

NSString*selectSql =@"select * from user";

FMResultSet*rs = [_dataBaseexecuteQuery:selectSql];

NSMutableArray*array = [NSMutableArrayarray];

while([rsnext]) {

UserModel*model = [[UserModelalloc]init];

model.userId= [rsintForColumn:@"userId"];

model.userName= [rsstringForColumn:@"userName"];

model.age= [rsintForColumn:@"age"];

NSData*data = [rsdataForColumn:@"headImage"];

model.headImage= [UIImageimageWithData:data];

[arrayaddObject:model];

}

returnarray;

}

//删除

-(void)deleteUserWithUserId:(int)userId

{

NSString*deleteSql =@"delete from user where userId=?";

BOOLret = [_dataBaseexecuteUpdate:deleteSql,@(userId)];

if(!ret) {

NSLog(@"%@",_dataBase.lastErrorMessage);

}

}

//修改

-(void)updateUserModel:(UserModel*)model userId:(int)userId

{

NSString*sql =@"update user set userName=?, age=?, headImage=? where userId=?";

//图片转换成二进制数据

NSData*data =UIImagePNGRepresentation(model.headImage);

BOOLret = [_dataBaseexecuteUpdate:sql, model.userName,@(model.age), data,@(userId)];

if(!ret) {

NSLog(@"%@",_dataBase.lastErrorMessage);

}

}

@end

6.UIAlertController的封装方法:

- (void)createAlertViewText:(NSString *)text

{

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:text preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

}];

UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

}];

[alertController addAction:okAction];

[alertController addAction:cancelAction];

[self presentViewController:alertController animated:YES completion:nil];

}

实现方法:

- (void)searchBtnClick

{

[_licenseNumber resignFirstResponder];

_dp.hidden = YES;

_lineView.hidden = YES;

_endBtn.hidden = YES;

_showOrHidden = YES;

NSMutableArray *licens = ((AppDelegate *)[UIApplication sharedApplication].delegate).licen;

for (int i=0; i

if ([_licenseNumber.text isEqualToString: licens[i]]) {

[self createData];

}

}

if ([_licenseNumber.text  isEqual: @""])

{

[self createAlertViewText:@"车牌号不能为空"];

}

if ([_dateBtn.titleLabel.text  isEqual: @"查询日期"])

{

[self createAlertViewText:@"请选择日期"];

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 做开发也有一段时间了,看了好多大神的代码,总体感觉他们写的代码简洁,好看,然而在对比下我写的代码,混乱,无序,简直...
    蔡林林阅读 1,974评论 0 0
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,629评论 2 7
  • 目录 一. 数据库的介绍 常用的数据库 数据库存储数据的方式 表的操作 二. sqlite3(FMDatabase...
    Vinc阅读 1,083评论 0 20
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,113评论 29 470
  • 天上掉下五个字:‘’那都不是事‘’今天久旱下雨,一个老农民在天空中看到了四个字:‘’我快疯了‘’。 很小的时侯,刚...
    静夜思今阅读 495评论 0 0