代理的步驟:
1.定義協(xié)議方法
@protocol SecondViewControllerDelegate
-(void)changeFirstViewControllerLabel:(NSString*)string;
@end
2.把代理設(shè)置成secondViewController的一個(gè)屬性。
@property(nonatomic,assign)id delegate;
3.
[self.delegate changeFirstViewControllerLabel:tf.text];
4.遵從協(xié)議
#import"SecondViewController.h"
@interfaceFirstViewController :UIViewController
svc.delegate=self;
5.調(diào)用協(xié)議方法-(void)changeFirstViewControllerLabel:(NSString*)string
{
label.text= string;
}
//代理本質(zhì)是實(shí)現(xiàn)了對(duì)象的相互調(diào)用
//導(dǎo)航控制器中上級(jí)界面向下級(jí)界面?zhèn)髦?可以叫做正向傳值
//最常用的策略圃伶,下級(jí)界面定義相應(yīng)的屬性來接收上級(jí)界面?zhèn)鬟f過來的值
//iOS7 之前(傳值操作寫在push 之后襟锐,是無法實(shí)現(xiàn)傳值的)
//傳值
//第一次調(diào)用視圖控制器的view屬性會(huì)觸發(fā)loadView和viewDidLoad
//聲明一個(gè)協(xié)議 (協(xié)議本質(zhì)上是多個(gè)類共享的方法列表,只有方法的聲明沒有實(shí)現(xiàn))
@protocol SendValue
//@required(必須實(shí)現(xiàn)的方法)
- (void)sendTitle:(NSString *)title;
//@optional 可選實(shí)現(xiàn)的方法
@end
//判斷_delegate中是否支持sendTitle:方法
if ([_delegate respondsToSelector:@selector(sendTitle:)]) {
//為了增強(qiáng)代碼的安全性(健壯性)
[_delegate sendTitle:btn.currentTitle];
}
想要檢查某個(gè)類是否實(shí)現(xiàn)了某個(gè)協(xié)議或者某個(gè)類是否實(shí)現(xiàn)了某個(gè)協(xié)議的方法娄柳,可以通過以下方式來進(jìn)行測試
//獲取某個(gè)對(duì)象
MyClassView *myClassView = xxxxxxx;
//判斷該對(duì)象是否實(shí)現(xiàn)了MyChooseDayViewDelegate協(xié)議
if([myClassView conformToProtocol:@protocol (MyChooseDayViewDelegate)]){
//TODO: balabalabala...
}