你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 代理學習筆記

代理學習筆記

編輯:IOS開發綜合

大部分情況下,我們在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.在代理方實現代理方法
// 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應用開發有所幫助.

【代理學習筆記】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

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