大部分情況下,我們在IOS中使用代理都是用來進行反向傳值的。這篇博文主要用來記載代理的實現步驟,關於代理,我看到過一篇超級詳細的簡文:<簡書 - 杜小壯>你真的了解IOS代理設計模式嗎?
順便附上我寫的Demo鏈接:Demo鏈接
Demo思路:我定義了兩個ViewController:A和B。A上有一個Label和一個Button,B上只有一個Button。要求,點擊A的Button,跳轉入B界面;再點擊B的Button,返回A界面,並且A界面的Label的text值變為:“這是傳的值“。
界面的定義代碼我就不再給出了,很簡單,而且Demo裡都有,主要是Delegate的實現步驟。
1.在委托方聲明代理屬性// 1.在B中,定義一個代理屬性(weak)
@property (nonatomic, weak) id delegate;
2.在委托方定義代理協議
// 2.設置代理
@class DelegateViewController;
@protocol DelegateViewControllerDelegate <NSObject>
@optional
// 代理方法的第一個參數默認寫成傳遞自己,從第二個參數開始才是想要傳遞的值。
- (void)delegateViewController:(DelegateViewController *)vc value:(NSString *)value;
@end
其中需要注意的是:1.協議中有兩個修飾符@optional和@required,@optional表示代理方法可實現也可不實現,而@required表示代理方法必須實現。但是如果@required的方法沒有實現的話,也不會報錯,僅僅只是一個黃色的警告。這兩個修飾符起到增強代碼可讀性的作用。2.代理方法的第一個參數,一般都是將自身傳遞出去(例如,使用tableview的代理方法,大多都有一個tableView參數)。這時候,在.h文件中需要使用@class 來引入協議下方定義的viewController。3.設置完協議後,代理屬性應該修改為@property (nonatomic, weak) id<DelegateViewControllerDelegate> delegate;
,其目的也是為了增強代碼可讀性。
// 3.1 引入代理
@interface ViewController ()<DelegateViewControllerDelegate>
// 3.2 將代理設為自身
// 點擊跳轉到寫有Delegate的界面
- (void)btnClick:(UIButton *)button
{
DelegateViewController *vc = [[DelegateViewController alloc] init];
vc.delegate = self;
[self presentViewController:vc animated:YES completion:nil];
}
// 3.3實現代理方法
- (void)delegateViewController:(DelegateViewController *)vc value:(NSString *)value
{
// 從delegateViewController跳轉回來後,設置lbl傳來的值
_lbl.text = value;
}
4.在委托方響應代理方法,並且傳值
// 3.設置執行傳值的動作(在執行何種操作的情況下需要代理)
- (void)btnClick:(UIButton *)button
{
if ([_delegate respondsToSelector:@selector(delegateViewController:value:)]) {
[_delegate delegateViewController:self value:@"這是傳的值"];
[self dismissViewControllerAnimated:YES completion:nil];
}
}
只要按照上面的4步來,實現代理傳值還是很簡單的。
以上就是代理學習筆記的全文介紹,希望對您學習和使用IOS應用開發有所幫助.【代理學習筆記】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!