iOS视图控制器之间delegate传值教程

iOS视图控制器之间delegate传值教程

大家好,又见面了,我是全栈君。

之前在StackOverFlow上看到一篇讲传值(segue传值和delegate传值)的文章,感觉讲的非常清晰,就将delegate部分翻译了一下。有兴趣能够看看。

原文:

http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers

译文:

为了从ViewControllerB往回传值到ViewControllerA,我们须要使用协议(Protocols)和代理(Delegates)

为了实现这个过程,我们须要设置ViewControllerAViewControllerB的代理。

这样可以使ViewControllerB可以发送消息到ViewControllerA,相同也能使我们将数据回传。

ViewControllerA作为ViewControllerB的代理必需要遵从我们在ViewControllerB中定义的协议(Protocols),这可以告诉ViewControllerA有哪些方法是必需要实现的。


1.ViewControllerB.h中,在#import@interface之间(就是代码位置)。我们像以下这样定义我们的协议及协议方法:

@classViewControllerB;// Important

@protocol ViewControllerBDelegate <NSObject>
– (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item;
@end

注:(NSString *)item是我们如今要回传的数据类型,也能够是其它类型,如字典、数组等

 

2.仍然是在ViewControllerB.h中。设置一个delegate属性,同一时候在ViewController.msynthesize

 

@property (nonatomic, weak) id <ViewControllerBDelegate>delegate;

 

在project中我是这么做的:

@propertyid<SelectPeopleVCDelegate>delegate;

 

3.

ViewControllerB
中,我们在将要从导航控制器中弹出该视图的时候向代理发送消息
(
消息中含有我们要传递的值
)

 

NSString *itemToPassBack = @“Pass this value back to ViewControllerA”;
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];

在实际project中我是这样完毕的:

– (void)viewDidDisappear:(BOOL)animated

{

    [self.delegateaddItemViewController:selfdidFinishSelectPeople:dataSourceArray];

}

注:dataSourceArray是我的数据源,在一个公开变量,在前面的程序中完毕赋值。

 

4.
以上就是全部要在
ViewControllerB
中进行的操作。接下来就是
ViewControllerA
的操作。

首先我们要在ViewControllerA.h中导入ViewControllerB,并遵从它的协议:

 

#import “ViewControllerB.h”

@interface ViewControllerA :UIViewController <ViewControllerBDelegate>

 

5.ViewControllerA.m中实现协议方法:

 

– (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item
{
    NSLog(@“This was returned from ViewControllerB %@”,item);
}

 

6.最后,在我们将ViewControllerB压入堆栈之前,我们须要告诉ViewControllerBViewControllerA是它的代理(delegate)

 

ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@“ViewControllerB” bundle:nil];
viewControllerB.delegate = self
[[self navigationController] pushViewController:viewControllerB animated:YES];

 

在实际project中我是这样做的:

– (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

   UIViewController * viewController = segue.destinationViewController;

   BAGSelectPeopleVC * selectPeopleVC = (BAGSelectPeopleVC *)viewController;

    

    selectPeopleVC.delegate =self;

}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116356.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 树莓派连接到WiFi并用ssh连接

    树莓派连接到WiFi并用ssh连接硬件:树莓派zerow;系统:2019-09-26-raspbian-buster-lite;1、在/boot/目录下创建文件wpa_supplicant.conf,如下,即可连接到WiFi;country=CNctrl_interface=DIR=/var/run/wpa_supplicantGROUP=netdevupdate_config=1network={…

    2022年5月26日
    43
  • 移动APP开发之技术选择

    移动APP开发之技术选择APP开发种类目前主流的APP主要为iOS版本和Android版本。早期APP的开发,两个版本需要分开独立进行,分别使用Objective-C/swift和Java语言。这些APP也称为NativeAPP,即原生系统。由于NativeAPP开发成本高、难度大,随着技术的发展,出现了Hybrid(混合)APP开发,即支持跨平台或支持原生+H5相结合的APP。除此之外,还有一种称为WebAp…

    2022年5月30日
    29
  • 想自学Java的速来!孙鑫视频教程百度云盘

    想自学Java的速来!孙鑫视频教程百度云盘MySQL数据库最佳学习线路脑图:一、对MySQL的认识认识Mysql数据库下载安装MySQL软件在Linux系统环境下安装MySQLMySOL体系结构与存储引擎MySQL体系结构QueryCache详解存储引擎InnoDB体系结构InnoDB的三大特性.数据库文件参数文件参数类型错误日志文件(errorlog)二进制日志文件(binarylog)慢查询日志(slowlog)全量日志(generallog)审计日志(auditlog)

    2022年5月16日
    36
  • mysql命令窗口_HLOOKUP函数

    mysql命令窗口_HLOOKUP函数窗口:记录集合窗口函数:在满足某些条件的记录集合上执行的特殊函数,对于每条记录都要在此窗口内执行函数。有的函数随着记录的不同,窗口大小都是固定的,称为静态窗口;有的函数则相反,不同的记录对应着不同的窗口,称为滑动窗口。1.窗口函数和普通聚合函数的区别:①聚合函数是将多条记录聚合为一条;窗口函数是每条记录都会执行,有几条记录执行完还是几条。②聚合函数也可以用于窗口函数。2.窗口函数的基…

    2022年10月4日
    4
  • gamma校正到底是个什么玩意儿

    gamma校正到底是个什么玩意儿一.在哪见过、听说过Gamma?  *还用说,AdobeGamma  *常听说MAC的默认Gamma是1.8,PC的是2.2  *我的显卡驱动程序里有Gamma调节  *我下载了一个软件,也可以调节显示器的Gamma  *WinDVD播放器带Gamma校正功能  *ACDSEE的曝光调节里可以调Gamma  *ACDSEE的选项中有Enable

    2022年6月17日
    34
  • 织梦自定义表单 在线报名 在线预约听语音

    织梦自定义表单 在线报名 在线预约听语音

    2021年9月25日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号