iOS常用的封裝方法
做開發也有一段時間了,看了好多大神的程式碼,總體感覺他們寫的程式碼簡潔,好看,然而在對比下我寫的程式碼,混亂,無序,簡直不堪入目啊!
總體來說大神們的程式碼封裝的都比較好,對一個專案要重複用到的程式碼他們都會封裝起來,這樣用起來的時候也比較方便,也不用重複的去寫這段程式碼了!
下面是我在開發中封裝到的一些經常使用的一些方法,如有寫錯的地方或者大家有更好的方法,還請大家給我提出來,大家一起學習!謝謝!
1.常用控制元件方法的封裝:
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface MyUtil : 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"
@implementation MyUtil
+(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;
return label;
}
+(UILabel *)createLabelFrame:(CGRect)frame text:(NSString *)text color:(UIColor *)textColor
{
return [selfcreateLabelFrame:frame text: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:title forState:UIControlStateNormal];
[btnsetTitleColor:[UIColorblackColor] forState:UIControlStateNormal];
[btnsetBackgroundImage:[UIImageimageNamed:bgImageName] forState:UIControlStateNormal];
[btnaddTarget:target action:actionforControlEvents:UIControlEventTouchUpInside];
return btn;
}
+(UIImageView *)createImageViewFrame:(CGRect)frame imageName:(NSString *)imageName
{
UIImageView *imageView = [[UIImageViewalloc] initWithFrame:frame];
imageView.image = [UIImageimageNamed:imageName];
return imageView;
}
+ (NSString *)transferCateName:(NSString *)name
{
if ([name isEqualToString:@"Business"]) {
return @"商業";
}elseif ([name isEqualToString:@"Weather"]) {
return @"天氣";
}elseif ([name isEqualToString:@"Tool"]) {
return @"工具";
}elseif ([name isEqualToString:@"Travel"]) {
return @"旅行";
}elseif ([name isEqualToString:@"Sports"]) {
return @"體育";
}elseif ([name isEqualToString:@"Social"]) {
return @"社交";
}elseif ([name isEqualToString:@"Refer"]) {
return @"參考";
}elseif ([name isEqualToString:@"Ability"]) {
return @"效率";
}elseif ([name isEqualToString:@"Photography"]) {
return @"攝影";
}elseif ([name isEqualToString:@"News"]) {
return @"新聞";
}elseif ([name isEqualToString:@"Gps"]) {
return @"導航";
}elseif ([name isEqualToString:@"Music"]) {
return @"音樂";
}elseif ([name isEqualToString:@"Life"]) {
return @"生活";
}elseif ([name isEqualToString:@"Health"]) {
return @"健康";
}elseif ([name isEqualToString:@"Finance"]) {
return @"財務";
}elseif ([name isEqualToString:@"Pastime"]) {
return @"娛樂";
}elseif ([name isEqualToString:@"Education"]) {
return @"教育";
}elseif ([name isEqualToString:@"Book"]) {
return @"書籍";
}elseif ([name isEqualToString:@"Medical"]) {
return @"醫療";
}elseif ([name isEqualToString:@"Catalogs"]) {
return @"商品指南";
}elseif ([name isEqualToString:@"FoodDrink"]) {
return @"美食";
}elseif ([name isEqualToString:@"Game"]) {
return @"遊戲";
}elseif([name isEqualToString:@"All"]){
return @"全部";
}
return nil;
}
@end
2.裁剪圖片方法的封裝:
- (UIImage*)clipImage:(UIImage*)bigImage inRect:(CGRect)rect
{
CGImageRef imageRef =CGImageCreateWithImageInRect(bigImage.CGImage, rect);
UIImage *image = [UIImageimageWithCGImage:imageRef];
return image;
}
實現方法:
//建立圖片顯示
CGRect frame =CGRectMake(100*j,100*i, 100,100);
UIImage *tmpImage = [selfclipImage:image inRect:frame];
3.封裝的下載方法:
#import <Foundation/Foundation.h>
@classMyDownloader;
@protocol MyDownloaderDelegate <NSObject>
- (void)downloadFail:(MyDownloader *)downloader error:(NSError *)error;
- (void)downloadFinish:(MyDownloader *)downloader;
@end
@interface MyDownloader :NSObject<NSURLConnectionDelegate,NSURLConnectionDataDelegate>
- (void)downloadWithURLString:(NSString *)urlString;
@property (nonatomic,readonly)NSData *receiveData;
@property (nonatomic,assign)NSInteger type;
@property (nonatomic,weak)id<MyDownloaderDelegate> delegate;
@end
實現方法:
#import "MyDownloader.h"
@implementation MyDownloader
{
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:request delegate: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 <Foundation/Foundation.h>
typedefvoid (^FINISHBLOCK)(NSData *receiveData);
typedefvoid (^FAILBLOCK)(NSError *error);
@interface MyDownloader :NSObject<NSURLConnectionDataDelegate,NSURLConnectionDelegate>
{
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"
@implementation MyDownloader
-(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:request delegate: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 <Foundation/Foundation.h>
#import "UserModel.h"
@interface DBManager :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
*/
@implementation DBManager
{
//資料庫檔案的關聯物件
FMDatabase *_dataBase;
}
+(DBManager *)sharedManager
{
staticDBManager *manager = nil;
@synchronized(self){
if (manager ==nil) {
manager = [[DBManageralloc] init];
}
}
return manager;
}
-(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、開啟資料庫
BOOL isOpen = [_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)";
BOOL ret = [_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
{
//判斷使用者名稱是否存在
BOOL isExists = [selfisExists:model.userName];
if (isExists) {
NSLog(@"使用者名稱已存在");
return;
}
//?是佔位符,表示要傳一個值
NSString *insertSql =@"insert into user (userName, age, headImage) values (?, ? ,?)";
//圖片轉換成二進位制
NSData *imageData =UIImagePNGRepresentation(model.headImage);
BOOL ret = [_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];
[array addObject:model];
}
return array;
}
//刪除
-(void)deleteUserWithUserId:(int)userId
{
NSString *deleteSql =@"delete from user where userId=?";
BOOL ret = [_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);
BOOL ret = [_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<licens.count; i++) {
if ([_licenseNumber.text isEqualToString: licens[i]]) {
[self createData];
}
}
if ([_licenseNumber.text isEqual: @""])
{
[self createAlertViewText:@"車牌號不能為空"];
}
if ([_dateBtn.titleLabel.text isEqual: @"查詢日期"])
{
[self createAlertViewText:@"請選擇日期"];
}
}
相關推薦
iOS常用數學方法
(1)向上取整 extern float ceilf(float); extern double ceil(double); extern long double ceill(long double); 示例: ceilf(3.9)=4 ceilf(3.1)=4 ceilf(
iOS 常用函式方法
rand() —-隨機數 abs() / labs() —-整數絕對值 fabs() / fabsf() / fabsl() —-浮點數絕對值 floor() / floorf() / floorl() —-向下取整 ceil() / ceilf() /
iOS常用的封裝方法
做開發也有一段時間了,看了好多大神的程式碼,總體感覺他們寫的程式碼簡潔,好看,然而在對比下我寫的程式碼,混亂,無序,簡直不堪入目啊! 總體來說大神們的程式碼封裝的都比較好,對一個專案要重複用到的程式碼他們都會封裝起來,這樣用起來的時候也比較方便,也不用重複的去寫這段程
web前端常用的封裝方法
1、放大鏡 //頁面載入完畢後執行 window.onload = function () { var oDemo = document.getElementById('demo'); var oMark = documen
ios 常用的一些方法和注意點 componentsSeparatedByString componentsJoinedByString以及NSURl和NSURLComponents
將string字串轉換為array陣列 NSArray *array = [Str componentsSeparatedByString:@","]; 注意://componentsSeparatedByString 這個方法有一個bug 當被切割的字串是 @“”
iOS常用方法——一個好用的獲取導航欄高度和Tabbar高度的分類
開發中經常需要知道導航欄(系統)的高度和Tabbar的高度,一般是用來計算在ViewController中的位置和高度,我們可以寫一個UIVIewController的分類,這樣在呼叫的時候就很方便。程式碼如下: #import "UIViewController+MYViewCon
iOS常用方法——UIWebView全屏顯示的實現
專案中載入webView,導航欄由web端做的話,客戶端就需要隱藏掉導航欄。這個時候顯示出來的頁面,在頂部會出現狀態列為空白的問題。底部也會多出空白,即: - (void)viewDidLoad { [super viewDidLoad]; // Do any add
web前端,常用js方法封裝
搜尋總結了一些前端日常開發中,常用的一些方法封裝 var myJs = { /* * 格式化日期 * @param dt 日期物件 * @returns {string} 返回值是格式化的字串日期 */ getDate
vue專案常用的方法封裝
vue全家桶構建專案過程中,需要經常呼叫一些方法,比如axios的請求,下面就將經常用的方法進行封裝 import Vue from 'vue' import axios from 'axios' import qs from 'qs' import Route
iOS 常用的儲存圖片的兩個方法
第一種、就是儲存到系統相簿中,這個也是最簡單的,當然使用者想要訪問系統相簿也是需要許可權的,需要使用者同意。 在Plist檔案加入下面的鍵值對就可以了 key : Privacy - Photo Library Usage Description val
iOS常用方法——WKWebView與h5互動的實現
隨著前端開發的強大,原生與h5的互動用的也越來越多。 為什麼選用WKWebView,我們可以做一個對比,同一個web頁面,用UIWebView載入和用WKWebView來載入,記憶體佔用情況很容易看出來,回到原生頁面之後,UIWebView對應的記憶體也不會降
iOS常用設計模式——工廠方法(簡單工廠模式,工廠方法模式, 抽象工廠模式)
1. 簡單工廠模式 如何理解簡單工廠,工廠方法, 抽象工廠三種設計模式? 簡單工廠的生活場景,賣早點的小攤販,他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠,它生產包子,饅頭,地溝油烙的煎餅。該場景對應的UML圖如下所示: 圖1:簡單工廠模式UML圖 簡單
常用js方法封裝
常用js方法封裝 var myJs = { /* * 格式化日期 * @param dt 日期物件 * @returns {string} 返回值是格式化的字串日期 */ getDates: function(dt) {
iOS [UIApplication sharedApplication] openURL等常用的方法使用例如:打電話、定位等
1、打電話 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://電話號碼"]]; 2、發簡訊 [[UIApplication sharedApplication] openURL
IOS常用延遲呼叫,後臺呼叫,主執行緒呼叫方法
/延遲呼叫 [selfperformSelector:@selector(doSomeThing:) withObject:nilafterDelay:1.0f]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int
iOS開發中一些常用的方法
1.壓縮圖片#pragma mark 處理圖片 - (void)useImage:(UIImage *)image { NSLog(@"with-----%f heught-----%f",image.size.width,image.size.height);
iOS常用的兩種延時的方法
//1 [selfperformSelector:@selector(obj:) withObject:@"可傳引數"afterDelay:3]; //2 程式碼直接bl
JavaScript常用工具方法封裝
typeof turn spin between radi change flex ret first 因為工作中經常用到這些方法,所有便把這些方法進行了總結。 JavaScript 1. type 類型判斷 isString (o) { //是否字符串 retu
iOS常用方法——WKWebView快取清理的實現
WKWebView是iOS8之後出現的,相較於UIWebView,WKWebView佔用的記憶體更小,還有一些其他的優化。但是如果我們不去主動清理webView產生的快取,兩者都會存在快取這個問題。比如說一個網頁改了一些內容,如果不清理快取,可能很長一段時間我們
前端進階技術:JavaScript 和 CSS 常用工具方法封裝教程!
www splay replace hasclass flow none oot ngs 蘋果手機 因為工作中經常用到這些方法,所有便把這些方法進行了總結,希望能對大家有幫助。提醒大家一點,學習前端,基礎真的很重要,切勿急於求成! JavaScript type 類型判