淺談Objective-C代理方案
Objective-C代理方案是本文要介紹的內容。通過一個ViewController控制著AView和BView,這樣的一個實例來介紹內容,我們先來看詳細內容。
現在要實現:AView中點擊切換到BView,BView中點擊又切換回AView中,并把Bview刪除或隱藏。
由于對模式不是很清楚,所以沒想到用什么模式處理,如果有什么好的模式可以解決上述問題,希望大俠們指教哇。
最后使用的方法是objective-c的代理。
1、在BView.h中定義一個代理:
- id delegate; // A delegate that wants to act on events in this view
2、定義代理方法,這里使用到的是objective-c 的協議
- @interface NSObject ( BViewDelegate)
- -(void)delegateMethod;
- @end
注:以上寫的協議為非正式的,所以,不用被設置代理者,不實現這個代理方法也是可以的。
3、在點擊中實現代碼中,調用代理者實現的代理方法。在BView.m中添加如何類似
代碼:
//設置了代理者,且代理者實現了
- delegateMethod
- if(delegate && [delegate respondsToSelector:@selector(delegateMethod)])
- delegate delegateMethod];
4、在AViem.m中設置BView的代理,并實現delegateMethod方法即可:
類似初始化中添加:[aView setDelegate:self];
- -(void)delegateMethod{
- //control bView code here
- ...
- }
另外,關于正式協議:
- @protocol protocolName
- @optional -(void)delegateMethodA
- @required -(void)delegateMethodB
- // other methods
- ...
- @end
正式協議類似于java的借口或抽象類。@optional 的方法,可實現也可不實現,但@required 的方法必需實現。默認為@required。
正式協議要求在代理類中聲明采納此代理,如:
- @interface ClassName: NSObject <ProtocolName>
- //...
- @end
另外,在調用特殊代理方法前,需要通過conformsToProtocol函數來判斷代理對
象是否遵守定義的協議,如:
- if([mydelegate conformsToProtocol:@protocol(protocolName)])
- {
- [mydelegate delegateMethod];
- }
或者使用
- respondsToSelector:@selector
來判斷代理對象是否實現相應的方法。
小結:淺談Objective-c代理方案的內容介紹完了,希望本文對你有所幫助!