亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

簡述UIViewControl之間的七種傳值方式~~~

2019-11-14 18:05:04
字體:
來源:轉載
供稿:網友

將自己學習到的UIViewControl之間傳值的幾種方式在這里做一下總結,希望童鞋們多多支持哈~~~

一.正向傳值方式

    這種方式傳值應該是最簡單的方式,我們先來建立兩個視圖控制器暫且稱為OneViewControl和TwoViewControl,然后第一個視圖控制器上面有一個UIButton(按鈕)和一個UIlabel(標簽),第二個控制器中有一個UIButton和一個UITexField(文本框)。然后我們在AppDelegate加入如下代碼

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

    OneViewController *root = [[OneViewController alloc]init];

     self.window.rootViewController = root;

    return YES;

}

 

 通俗的說上面的代碼就是讓程序一運行的時候,首先執行的是OneViewControl中的代碼,很簡單。

現在我們想要達到的目的就是,點擊OneViewControl中的按鈕時,能把這個按鈕上面的文字傳到TwoViewControl中按鈕上面。

我們在TwoViewControl中.h文件中聲明一個屬性

 

@PRoperty(nonatomic,copy)NSString *str;

 

 在OneViewControl中的按鈕事件中添加如下代碼

 

 

-(void)onClick:(UIButton*)sender{    TwoViewController *twoView = [[TwoViewController alloc]init];     //使用屬性傳值    twoView.str = sender.titleLabel.text;   //跳轉到下一個視圖,是否有動畫,為了簡潔,就不寫動畫了      [self presentViewController:twoView animated:YES completion:nil];}

 

 好了~這樣TwoViewControl中按鈕上面的值就跟OneViewControl中按鈕值一樣了.達到了傳值的效果~~~很簡單的啦。

 

二.使用代理傳值(反向傳值)

這次我們在TwoViewControl上面的文本框輸入一些內容,然后點擊按鈕,返回到OneViewControl中,將內容顯示到OneViewControl的UILabel上。(所謂反向傳值就是從后一個視圖控制器傳值到前一個視圖控制器中)

先在TwoViewControl中.h文件中聲明協議:并聲明弱引用指針

@protocol TwoViewControllerDelegate<NSObject>//聲明協議//在接收方調用-(void)inputString:(NSString*)textStr;@end@interface TwoViewController : UIViewController//委托方聲明弱引用指針@property(nonatomic,weak)id<TwoViewControllerDelegate>delegate;@end

在TwoViewControl中.m的文件中按鈕事件加入如下代碼:

-(void)onClick{    //找到textField文本    UITextField *tf = (id)[self.view viewWithTag:2];    [tf resignFirstResponder];    //回傳數據    [self.delegate inputString:tf.text];    [self dismissViewControllerAnimated:YES completion:nil];}

 在OneViewControl中的按鈕方法中加入如下代碼

-(void)onClick:(UIButton*)sender{    TwoViewController *two = [[TwoViewController alloc]init];    two.delegate = self;        [self presentViewController:two animated:YES completion:nil];}

 好了第二種代理傳值就是這樣,~~~別忘記在第一個視圖控制器中.m文件加入遵守協議

 三.通知傳值(反向傳值)

在TwoViewControl中先創建一個通知對象,并發送通知,在按鈕事件中加入如下代碼

    //第一個參數是通知的名字,必須填寫    //第二個參數發送的對象    //第三個參數是字典,攜帶信息,沒有信息傳入nil    NSNotification *noti = [NSNotification notificationWithName:@"myNotification" object:self userInfo:@{@"inputstr":tf.text}];        //發送通知    [[NSNotificationCenter defaultCenter]postNotification:noti];

          [self dismissViewControllerAnimated:YES completion:nil];

 在OneViewControl中加入監聽通知的方法及響應方法

//3.監聽通知-(void)viewWillDisappear:(BOOL)animated{    [super viewWillDisappear:animated];    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];    //第一個參數是觀察者是誰    //第二個是調用的方法    //第三個是監聽通知的名字    //通知發送的對象,nil表示任何對象    [center addObserver:self selector:@selector(receiveNoti:) name:@"myNotification" object:nil];   }//4.響應-(void)receiveNoti:(NSNotification*)noti{    UILabel *label = (id)[self.view viewWithTag:1];    label.text = noti.userInfo[@"inputstr"];    }

 應該注意的是,通知的名稱兩邊必須一致,不然是接收不到發送過來的通知

四.使用Block傳值(反向傳值)

 使用Block傳值,先聲明一個無返回值,有一個參數的Block屬性在TwoViewControl中

@property (nonatomic,copy)void(^returnStrBlock)(NSString*);

 在TwoViewControl中,按鈕事件中加入如下代碼,當前視圖調用block

    UITextField *tf = (id)[self.view viewWithTag:2];    [tf resignFirstResponder];        self.returnStrBlock(tf.text);    [self dismissViewControllerAnimated:YES completion:nil];

 在oneViewControl中按鈕事件設置回調的的block函數

    TwoViewController *two = [[TwoViewController alloc]init];        //設置回調的block函數    two.returnStrBlock = ^(NSString* inputStr)    {        UILabel *label = (id)[self.view viewWithTag:1];        label.text = inputStr;    };    [self presentViewController:two animated:YES completion:nil];

 這個寫的比較簡單,但是效果是可以達到的~~~

五.使用全局變量傳值(全局變量傳值)

這種方式我覺得是很low的一種方式,也非常簡單,在TwoViewControl和oneViewControl中分別加入下面兩句代碼就可以了

NSString *inputStr;
//引用聲明在其他文件中的數據extern NSString *inputStr;

 我個人是不建議使用這種方式的~~~

六.單例傳值

 這種方式也是比較容易理解的,新建一個類文件.h文件中加入如下代碼

@interface SingletonModel : NSObject@property(nonatomic,strong)NSString *textStr;//聲明單例方法+(SingletonModel *)shareSingletonModel;@end

 在.m文件中實現這個類方法(單例模式大部分都是這樣創建實例的,簡單易懂,反正就一個嘛~~~)

static SingletonModel *shareObj = nil;@implementation SingletonModel+(SingletonModel *)shareSingletonModel{    if(shareObj==nil)    {        shareObj = [[SingletonModel alloc]init];    }    return shareObj;}@end

 然后就很簡單啦,在TwoViewControl中將值傳給單例對象,在OneViewControl中獲取這個值就歐啦~~~

 六.使用AppDelegate傳值

簡單來說,就是 在AppDelegate中聲明一個屬性,然后TwoViewControl中創建一個AppDelegate對象

 

    AppDelegate *appdelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;        appdelegate.textStr = tf.text;

 

 然后在OneViewControl中

-(void)viewWillAppear:(BOOL)animated{    [super viewWillAppear:animated];    AppDelegate *appdelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;        UILabel *label = (id)[self.view viewWithTag:1];    label.text = appdelegate.textStr;}

 這種方式跟上面的單例模式有著異曲同工之妙,舉個很簡單的例子,兩個人要交換東西,先將東西交給第三個人,再由第三個人轉交給兩人,而上面的單例和AppDelegate方式傳值,都是相當于那個第三個人。

 

好啦  ~~~~七種方式總算寫完了,從第一個字到最后一個符號,純手打,代碼也是一個個敲的~~~望各位小伙伴多多理解,如果哪里有問題,希望多多交流,如果覺得有用的話,就給個小小的贊啦~~~PS:我這個人很容易滿足的~~~謝謝各位小伙伴哈!

 

 

 

 

 

 

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人久久网| 欧美性生活大片免费观看网址| 欧美久久精品午夜青青大伊人| 日韩欧美高清在线视频| 欧美视频二区36p| 亚洲精品成人网| 欧美日韩久久久久| 亚洲第一中文字幕在线观看| 亚洲天堂av在线免费观看| 日韩在线观看成人| 一区二区三区 在线观看视| 国产精品www| 国产不卡在线观看| 亚洲欧美制服中文字幕| 欧美成人午夜免费视在线看片| 夜夜嗨av一区二区三区四区| 精品一区二区三区电影| 中文字幕日韩av电影| 不卡毛片在线看| 欧美成人一二三| 国产精品久久久久久久久久| 久久久久免费精品国产| 久久国产精品影视| 国产欧美韩国高清| 日本在线观看天堂男亚洲| 国产亚洲欧美日韩美女| 亚洲天堂日韩电影| 国产精品福利观看| 欧美电影免费观看网站| 久久久久久久国产| 精品久久久久久久久久国产| 国产精品久久久久一区二区| 国产精品久久久久久久久久99| www.亚洲天堂| 人体精品一二三区| 在线播放日韩欧美| 国产z一区二区三区| 亚洲精品日韩丝袜精品| 国产香蕉97碰碰久久人人| 亚洲a∨日韩av高清在线观看| 亚洲在线免费观看| 国产精品亚洲综合天堂夜夜| 91精品一区二区| 久久这里只有精品视频首页| 国产精品网红直播| 欧美极品少妇xxxxⅹ喷水| 久久成人精品一区二区三区| 成人黄色免费看| 久久久在线视频| 欧美一级成年大片在线观看| 美女黄色丝袜一区| 久久久久久久999精品视频| 欧美日韩一区二区三区| 亚洲欧美三级伦理| 精品中文视频在线| 中文字幕在线成人| 欧美日韩免费在线| 久精品免费视频| 成人乱色短篇合集| 成人性生交大片免费观看嘿嘿视频| 亚洲男人av在线| 国产精品久久久久久久久久久久| 欧美性xxxxxxxxx| 亚洲国产精彩中文乱码av在线播放| 欧美成人自拍视频| 欧美中文字幕在线观看| 日韩精品免费综合视频在线播放| 亚洲国产精品成人一区二区| 一色桃子一区二区| 亚洲一区二区在线| 欧美日韩成人在线播放| 中文字幕成人精品久久不卡| 91久久久久久久久久久久久| 国产噜噜噜噜久久久久久久久| 久久久久久亚洲精品| 91高潮精品免费porn| 欧美性猛交xxxx乱大交极品| 亚洲白虎美女被爆操| 亚洲福利视频网站| 亚洲欧洲美洲在线综合| 1769国内精品视频在线播放| 国产精品一区二区三区免费视频| 久久久亚洲影院| 亚洲女人天堂色在线7777| 国产精品jizz在线观看麻豆| 亚洲最大av网| 久久777国产线看观看精品| 欧美成人三级视频网站| 久久精品电影网站| 最新国产精品亚洲| 精品一区二区三区三区| 神马久久桃色视频| 色一区av在线| 欧美激情中文字幕在线| 国产日韩欧美综合| 九九精品在线观看| 97视频在线免费观看| 超碰日本道色综合久久综合| 亚洲黄色成人网| 午夜免费久久久久| 久久久噜久噜久久综合| 成人精品网站在线观看| 国产这里只有精品| 亚洲视频免费一区| 国产成人在线亚洲欧美| 久久国产精品久久久| 97激碰免费视频| 亚洲人成在线电影| 国产亚洲精品高潮| 久久久最新网址| 久久视频在线视频| 黑人巨大精品欧美一区二区| 91美女片黄在线观| 日韩av在线网| 理论片在线不卡免费观看| 色婷婷综合久久久久中文字幕1| 性欧美激情精品| 福利视频一区二区| 国产va免费精品高清在线| 日韩欧美国产黄色| 欧美日韩成人免费| 色综合久久天天综线观看| 川上优av一区二区线观看| xxx一区二区| 日韩视频在线观看免费| 成人a在线视频| 成人激情春色网| 91国内揄拍国内精品对白| 欧美第一黄色网| 91在线网站视频| 永久免费精品影视网站| 欧美在线亚洲在线| 久久精品成人欧美大片古装| 亚洲欧美精品中文字幕在线| 亚洲欧美国产一本综合首页| 欧美高清一级大片| 色综合久久88色综合天天看泰| 亚洲色无码播放| 成人福利免费观看| 日韩av免费网站| 岛国精品视频在线播放| …久久精品99久久香蕉国产| 色偷偷偷综合中文字幕;dd| 欧美成人性色生活仑片| 久久免费观看视频| 亚洲国产天堂久久国产91| 欧美激情videoshd| 欧美日韩在线免费| 精品久久久久久久久久ntr影视| 中文字幕久久亚洲| 国产欧美一区二区三区四区| 456亚洲影院| 久久免费观看视频| 91久久精品久久国产性色也91| 欧美人与性动交| 日韩有码在线观看| 久久精品视频99| 国产成人精品免高潮在线观看| 亚洲自拍偷拍一区| 国产精品96久久久久久| 久久精品人人做人人爽| 国产精品国模在线| 日韩动漫免费观看电视剧高清| 亚洲精品日韩欧美|