最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS通過代理逆向傳值的方式詳解

 更新時間:2016年12月05日 09:36:23   作者:YungFan  
在iOS開發(fā)中傳值是幾乎每個App都會用到的,對于傳統(tǒng)的順向傳值應該說是比較簡單的,但是逆向傳值往往會用到代理模式來實現(xiàn),很多同學在這一塊有迷惑,迷惑的不是怎么逆向傳值,而是不理解代理模式,下面這篇文章就給大家分析一下iOS通過代理逆向傳值的方式。

前言

在iOS開發(fā)中,常見的幾種逆向傳值方式,有代理(delegate)、通知(NSNotification),block等等,本文就給大家分析下,如何理解和快速上手代理模式,并以一個簡單的逆向傳值為案例,看看代理模式是不是很難。

一、代理模式中的幾個概念

講代理模式之前,首先需要弄清楚兩個概念:被代理對象和代理對象。并且需要知道它們之間是靠協(xié)議關(guān)連起來的。

1、被代理對象

被代理對象往往就是真正有做事意圖的那個對象,比如賣房子案例中的想賣房子的房主,保姆嬰兒案例中想喝奶的嬰兒。但是它們自己做不到,只能借助于房產(chǎn)中介和保姆。

2、代理對象

代理對象就是真正辦事的對象,如上面提到的幫賣房子的中介和照顧嬰兒的保姆。

3、協(xié)議

代理對象必須有一個規(guī)范才能成為代理,比如說只有持證的才能成為房產(chǎn)中介,房主才敢把房子交給他代理,只有家政服務的保姆才敢讓她過來照顧嬰兒,不可能讓保姆去賣房子,讓中介照顧嬰兒。而這個規(guī)范就是協(xié)議,這個協(xié)議誰定的?答案肯定是被代理對象。

二、代理模式的書寫規(guī)范

弄清楚基本概念以后,接下來就是書寫代理模式,很多同學不知道怎么下手,其實這也是有跡可循的。

被代理對象

1、定義協(xié)議,在協(xié)議中定義方法用于傳值,傳什么類型的值就設置什么類型的參數(shù)

2、聲明一個遵守上述協(xié)議的delegate屬性

3、在需要傳值的時候調(diào)用代理對象完成傳值

代理對象

1、遵守被代理對象定義的協(xié)議

2、實現(xiàn)協(xié)議中的方法,捕獲傳過來的值,并根據(jù)需求來處理捕獲的值

設置被代理對象的delegate屬性為代理對象

這一步是在上述兩個對象的其中一個里面完成的

三、代理模式與逆向傳值

通過如上描述可以看出,其實代理模式只是一種解決特定問題的方法,它有自己的使用場景,比如A想監(jiān)聽B的一些變化,A無法自己處理某些事情等。俗話說No Code, No BB,下面舉一個實際案例:現(xiàn)在有兩個界面,如圖1和圖2所示,界面很簡單,不再贅述,主要是在第一個界面點擊跳轉(zhuǎn)按鈕,到達第二個界面,然后第二界面在輸入框中輸入信息后點擊返回按鈕,第一個界面中的UILabel能顯示第二個界面輸入的內(nèi)容,這是最簡單的一個逆向傳值。

四、實現(xiàn)步驟

分析: 現(xiàn)在是第二個界面想傳值,但是自己做不了,所以它是被代理對象,第一個界面自然就是代理對象。然后根據(jù)上面的規(guī)范寫代碼。

1、被代理對象

//.h 文件

//被代理對象 做以下幾件事
//1、創(chuàng)建一個協(xié)議,用于傳值
//2、聲明一個遵守上述協(xié)議的delegate屬性
/**
 * 創(chuàng)建協(xié)議,里面有一個方法,帶一個參數(shù),該參數(shù)就是我想傳出去的值
 */
@protocol passValue <NSObject>
-(void)passedValue:(NSString *)inputValue;
@end

@interface NextViewController : UIViewController
/**
 * 聲明一個delegate屬性
 */
@property(nonatomic, weak) id<passValue> delegate;
@end

=================================================================

//.m 文件
#import "NextViewController.h"

@interface NextViewController ()
@property (weak, nonatomic) IBOutlet UITextField *inputText;
- (IBAction)back:(id)sender;
@end

@implementation NextViewController
- (void)viewDidLoad {
 [super viewDidLoad]; 
 self.navigationItem.title = @"第二個界面";
}

/**
 * 返回上一個界面
 *
 * @param sender <#sender description#>
 */
- (IBAction)back:(id)sender {
 NSString *inputString = self.inputText.text;
 //3、調(diào)用代理對象完成傳值
 if(self.delegate && [self.delegate respondsToSelector:@selector(passedValue:)]){
  [self.delegate passedValue:inputString];
 }
 [self.navigationController popViewControllerAnimated:YES];
}
@end

2、代理對象

//.h 文件

#import <UIKit/UIKit.h>
#import "NextViewController.h"
//代理對象
//實現(xiàn)被代理對象創(chuàng)建的協(xié)議,實現(xiàn)其中的方法,捕獲傳過來的值
@interface ViewController : UIViewController <passValue>
@end
=================================================================

//.m 文件
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *nextPassedValue;
- (IBAction)next:(id)sender;
@end

@implementation ViewController
- (void)viewDidLoad {
 [super viewDidLoad]; 
}

/**
 * 實現(xiàn)被代理對象的方法,將捕獲的值設置到UILabel中
 *
 * @param inputValue 傳過來的值
 */
-(void)passedValue:(NSString *)inputValue{
 self.nextPassedValue.text = inputValue;
}

//點擊返回按鈕跳轉(zhuǎn)到第二個界面
- (IBAction)next:(id)sender { 
 NextViewController *nvc = [[NextViewController alloc]init];
 //設置被代理對象的delegate屬性為代理對象即self
 nvc.delegate = self;
 [self.navigationController pushViewController:nvc animated:YES];
}
@end

五、實現(xiàn)效果

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對各位iOS開發(fā)者們能有所幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • iOS DropDown下拉按鈕效果代碼分享

    iOS DropDown下拉按鈕效果代碼分享

    這篇文章主要為大家詳細介紹了iOS DropDown下拉按鈕效果的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • iOS獲取Label高度的幾種方法與對比

    iOS獲取Label高度的幾種方法與對比

    這篇文章主要介紹了給大家介紹了iOS獲取Label高度的幾種方法,包括 view的sizeThatFits 方法、view的sizeToFit方法、NSString的sizeWithAttributes方法和NSString 的 boundingRectWithSize 方法,文中不僅介紹四種方法的實現(xiàn),還進行了對比,下面來一起看看吧。
    2016-11-11
  • iOS仿微信圖片分享界面實現(xiàn)代碼

    iOS仿微信圖片分享界面實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了iOS仿微信相冊界面翻轉(zhuǎn)過渡動畫效果,微信采用界面翻轉(zhuǎn)的過渡動畫跳轉(zhuǎn)到評論界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • iOS App的設計模式開發(fā)中對State狀態(tài)模式的運用

    iOS App的設計模式開發(fā)中對State狀態(tài)模式的運用

    這篇文章主要介紹了iOS App的設計模式開發(fā)中對State狀態(tài)模式的運用,示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-03-03
  • 講解Java中如何構(gòu)造內(nèi)部類對象以及訪問對象

    講解Java中如何構(gòu)造內(nèi)部類對象以及訪問對象

    這篇文章主要介紹了講解Java中如何構(gòu)造內(nèi)部類對象以及訪問對象,是Java入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • 使用objc runtime實現(xiàn)iOS閉環(huán)的懶加載功能

    使用objc runtime實現(xiàn)iOS閉環(huán)的懶加載功能

    利用objc runtime的動態(tài)性實現(xiàn)懶加載可以實現(xiàn)即可增加又可刪除功能,也可以避免污染類型。這篇文章主要介紹了使用objc runtime實現(xiàn)iOS閉環(huán)的懶加載功能,需要的朋友可以參考下
    2019-06-06
  • iOS App引導頁開發(fā)教程

    iOS App引導頁開發(fā)教程

    這篇文章主要為大家詳細介紹了iOS App引導頁開發(fā)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS開發(fā)微信收款到賬語音提醒功能思路詳解

    iOS開發(fā)微信收款到賬語音提醒功能思路詳解

    這篇文章主要介紹了iOS開發(fā)微信收款到賬語音提醒功能思路詳解,需要的朋友可以參考下
    2017-09-09
  • IOS 靜態(tài)庫和Framework區(qū)別

    IOS 靜態(tài)庫和Framework區(qū)別

    這篇文章主要介紹了IOS 靜態(tài)庫和Framework區(qū)別的相關(guān)資料,這里對動態(tài)庫與靜態(tài)庫做比較,選擇什么時候使用庫文件,需要的朋友可以參考下
    2016-12-12
  • ios 不支持 iframe 的完美解決方法(兼容iOS&安卓)

    ios 不支持 iframe 的完美解決方法(兼容iOS&安卓)

    下面小編就為大家?guī)硪黄猧os 不支持 iframe 的完美解決方法(兼容iOS&安卓)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論

虎林市| 龙江县| 敦煌市| 衡南县| 庄河市| 武清区| 沿河| 红安县| 集安市| 阿拉善盟| 武陟县| 仪征市| 琼中| 东港市| 三河市| 天津市| 修文县| 舒城县| 新和县| 登封市| 祁门县| 宜川县| 玉环县| 沽源县| 宜君县| 靖江市| 奎屯市| 双鸭山市| 准格尔旗| 湛江市| 囊谦县| 韶山市| 新巴尔虎左旗| 咸丰县| 大安市| 松溪县| 淮阳县| 宜兰县| 彭泽县| 新蔡县| 修水县|