小編給大家分享一下IOS開發(fā)之Target-Action模式有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、犍為網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為犍為等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
該模式主要是為了減少模塊之間代碼耦合性,以及增強(qiáng)模塊內(nèi)代碼之間的內(nèi)聚性.
讓我們來看看一個(gè)實(shí)例:
1:假設(shè)有這么一個(gè)需求:我們點(diǎn)擊一個(gè)視圖對(duì)象,可以改變?cè)撘晥D的顏色,這個(gè)對(duì)于初學(xué)者來說是一件非常容易做到的事,只要在這個(gè)視圖類中重寫:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event函數(shù),然后改變?cè)撘晥D的背景色即可,可是這時(shí)候又有了新的需求,一部分人需要在點(diǎn)擊該視圖改變?cè)撘晥D的顏色,一部分人需要在點(diǎn)擊該視圖時(shí)改變?cè)撘晥D的位置,為了讓不同對(duì)象執(zhí)行不同的事件,在實(shí)例化該視圖類對(duì)象時(shí)需要指定該對(duì)象感興趣的事件,對(duì)于這個(gè)需求我們可以通過定義枚舉變量作為該對(duì)象的數(shù)據(jù)成員,并在初始化的時(shí)候指定枚舉值(即指定感興趣的事件),同時(shí)需要重寫-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event函數(shù),讓它對(duì)不同的枚舉值,執(zhí)行不同的功能,假設(shè)這個(gè)時(shí)候我們又需要在點(diǎn)擊該視圖對(duì)象時(shí),執(zhí)行一個(gè)翻轉(zhuǎn)功能,我們得又去修改該視圖內(nèi)的具體實(shí)現(xiàn)功能,這樣代碼之間的耦合性就比較大,移植起來就很不方便(試想這樣的一個(gè)場景,假設(shè)別人的app需要你寫好的這個(gè)視圖類,但是別人不需要你視圖類中事件方法,則需要修改該視圖類,難免發(fā)生一些錯(cuò)誤),解決這個(gè)問題的方法就是Target-Action模式,直接看代碼:
//主視圖頭文件
#import@interface MainViewController : UIViewController @end
//主視圖實(shí)現(xiàn)
#import "MainViewController.h" #import "MyView.h" @implementation MainViewController -(id)init { self= [super init]; if (self) { } return self; } -(void)viewDidLoad { MyView * view1 = [[MyView alloc]initWithFrame:CGRectMake(10, 20, 100, 100) andTarget:self andAction:@selector(changeColor:)]; [self.view addSubview:view1]; MyView * view2 = [[MyView alloc]initWithFrame:CGRectMake(10, 20, 100, 100) andTarget:self andAction:@selector(moveFrame:)]; [self.view addSubview:view2]; } -(void)changeColor:(UIView *)aView { NSLog(@"buttonClick"); int red = arc4random()%255; int green = arc4random()%255; int blue = arc4random()%255; aView.backgroundColor = [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:1.0]; } -(void)moveFrame:(UIView *)aView { aView.frame = CGRectMake(arc4random()%320, arc4random()%480, 100, 100); } @end
//測試視圖類頭文件
#import@interface MyView : UIView { id _target; SEL _action; } -(id)initWithFrame:(CGRect)frame andTarget:(id)target andAction:(SEL)action; @property (assign,readwrite,nonatomic)id deledate; @end
////測試視圖類實(shí)現(xiàn)
#import "MyView.h" @implementation MyView -(id)initWithFrame:(CGRect)frame andTarget:(id)target andAction:(SEL)action { self = [super initWithFrame:frame]; if (self) { _target = target; _action = action; } self.backgroundColor = [UIColor blueColor]; return self; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [_target performSelector:_action withObject:self]; } @end
看完了這篇文章,相信你對(duì)“IOS開發(fā)之Target-Action模式有什么用”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!