你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS中協議delegate的傳值注意點

iOS中協議delegate的傳值注意點

編輯:IOS開發綜合

1、IOS中協議的用途一般是用來進行反向傳值,一般步驟如下:

1)聲明協議

@protocol ThirdDalegate <NSObject>

-(void)printNum:(int)num;//自定義方法用來反向傳值

@end

2)定義協議屬性

@interface SecondViewController :UIViewController

@property(nonatomic,assign)id<SecondDalegate>delegate;//定義屬性delegate

@end

3)實現協議方法

//一般先判斷協議方法是否已響應(即是否有其他類遵從本類的協議)

if ([self.delegaterespondsToSelector:@selector(printNum:)]) {

[self.delegateprintNum:1];//進行傳值

}

4)代理類接收值(傳值的類可以理解成委托類)

@interface ViewController ()<SecondDalegate>

- (void)viewDidLoad {

SecondViewController * second=[[SecondViewControlleralloc]init];

second.delegate=self;

}

-(void)printNum:(int)num{

NSLog(@"%d",num);

}

ps:以上為正常情況下的協議反向傳值,是最協議最常見的用法


2、但是有時候我們會想要自定義控件,類似UITableView,那麼此時單純的反向傳值已經滿足不了該需求,因為我們需要在初始化該控件的時候利用協議傳值到該控件內部,類似UITableView的numberOfRowsInSection設置cell數量的這種方法。

1)在委托類中聲明協議

@protocol ThirdDelegate <NSObject>

-(NSInteger)ViewWithNum;

@end


2)協議屬性

@interface TempView : UIView

@property(nonatomic,assign)id<ThirdDelegate>delegate;

-(instancetype)initWithFrame:(CGRect)frame andDelegate:(id)delegate;

//一般在控件初始化的時候就傳入代理類,以協議方法由於順序原因不響應

@end

3)在代理類中實現傳值

@interface ViewController ()<ThirdDelegate>

- (void)viewDidLoad {

TempView * tempV=[[TempViewalloc]initWithFrame:self.view.boundsandDelegate:self];

[self.viewaddSubview:tempV];

}

-(NSInteger)ViewWithNum{

return3;

}

4)自定義控件實現初始化方法

-(instancetype)initWithFrame:(CGRect)frame andDelegate:(id)delegate{

self=[superinitWithFrame:frame];

if (self) {

self.backgroundColor=[UIColorredColor];

self.delegate=delegate;//注意點:必須先遵從協議才能響應方法

if ([self.delegaterespondsToSelector:@selector(ViewWithNum)]) {

NSLog(@"%ld",(long)[self.delegateViewWithNum]);

}

}

returnself;

}




以上就是IOS中協議delegate的傳值注意點的全文介紹,希望對您學習和使用IOS應用開發有所幫助.

【iOS中協議delegate的傳值注意點】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved