今天在學習UINavigationController的時候,有1個是下級視圖控制器向上級視圖控制器傳值的功能,而這個傳值的功能的實現就是代理
甚么是上級視圖控制器、下級視圖控制器,
當使用1個視圖導航控制器(UINavigationController)順次載入視圖控制器(UIViewController)時,先被載入的是上級,后被載入的是下級
下級給上級傳遞數據時就需要使用代理(delegate),
如果給上級傳遞數據:
定義下級視圖控制器VC2
定義1個協議:
@protorol SendMessage <NSObject>@en
//協議的方法:
-(void)sendmessage(NsString *)message;
@end
定義
@interface VC2:UIViewController<SendMessage>
//定義1個代理對象
實現:
@implement VC2
-(void)initWithDelegate{
if(delegate)
[delegate
sendmessage:@"小2結婚了,快點來啊親"];
}
}
定義上級視圖控制器VC1
定義:
@interface VC1:UIViewController :UIViewController<SendMessage>
實現:
@implement VC1
//實現協議的方法:
-(void)sendmessage(NsString *)message{
NsLog(@"%@",message);
}
上述所說的是這兩個視圖是緊挨的,中間沒有間隔其他的視圖控制器
舉個例子說明,要不然我也有口難辨,
:比如VC1、VC2是兩個大老板,VC的對象好比VC的員工,而VC1中我們定義了1個delegate泛型對象好比VC1的小秘書,
當VC1被載入導航控制器中就好比VC1的1個員工小1結婚,VC2的員工小2帶著VC2的小秘來道賀,
小2讓小秘記住小1的電話號碼,
(小2.小秘 = 小1),
然后當VC2被i載入導航控制器好比VC2的員工小2結婚了,在小2的婚礼上,
小秘打電話告知小1讓他快點來:
但是它要先看看自己有無記住小1的號碼,如果有就打,沒有就不打
if(delegate)
[小秘 sendmessage:@"小2結婚了,快點來啊親"];
}
小1接到了這個消息后,它把個message打印出來了。
這個打印的動作不是小秘實現的,小秘只負責發送信息,至于小1如何處理那就是他的事情了,而他要做的就是實現這個方法,
小秘負責調用,小1負責實現。所以小秘就是直說不做事情,小1就依照小秘說的去做。
小秘說:洗澡????
小1就要依照小秘的吩咐去完成洗澡的這個進程,至于怎樣洗和跟誰洗那就是小1的事情了。
比喻多有不當,敬請諒解????????