dismissModalViewController并传回数据

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (158)

我有两个视图控制器,firstViewControllersecondViewController。我正在使用此代码切换到我的secondViewController(我也传递一个字符串):

secondViewController *second = [[secondViewController alloc] initWithNibName:nil bundle:nil];

second.myString = @"This text is passed from firstViewController!";

second.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentModalViewController:second animated:YES];

[second release];

然后,我在secondViewController中使用此代码切换回firstViewController:

[self dismissModalViewControllerAnimated:YES];

所有这些工作正常。我的问题是,我将如何将数据传递给firstViewController?我想从secondViewController传递一个不同的字符串到firstViewController中。

提问于
用户回答回答于

我可能在这里不合适,但是我开始更喜欢块语法来使用非常冗长的委托/协议方法。如果您从vc1制作vc2,请在vc2上拥有一个属性,您可以从vc1中设置该属性!

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

然后,当你想告诉vc1 vc2中发生什么事时,只需执行你在vc1中定义的块!

self.somethingHappenedInVC2(@"Hello!");

这使您可以将数据从vc2发送回vc1。就像魔术一样。海事组织,这比协议更容易/更清洁。积木很棒,需要尽可能地拥抱。

假设我们有一个mainVC,我们希望暂时提供一个modalVC来获得用户的一些输入。为了从mainVC中呈现modalVC,我们需要在mainVC中分配/初始化它。很基本的东西。那么当我们创建这个modalVC对象时,我们也可以在其上设置一个block属性,这使得我们可以轻松地在两个vc对象之间进行通信。所以让我们从上面的例子中,将follwing属性放在modalVC的.h文件中:

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

然后,在我们的mainVC中,在alloc / init了一个新的模态VC对象后,你可以像这样设置modalVC的block属性:

ModalVC *modalVC = [[ModalVC alloc] init];
modalVC.somethingHappenedInModalVC = ^(NSString *response) {
     NSLog(@"Something was selected in the modalVC, and this is what it was:%@", response);
}

所以我们只是设置block属性,并且定义在执行该块时会发生什么。

最后,在我们的modalVC中,我们可以有一个由dataSource数组的字符串支持的tableViewController。一旦选择行,我们可以做这样的事情:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
      NSString *selectedString = self.dataSource[indexPath.row];
      self.somethingHappenedInModalVC(selectedString);
 }

热门问答

边缘计算机器 ECM 是裸金属还是虚拟机?

你好,ECM目前以提供虚拟机为主,后续可以同时提供容器。

弹性伸缩如何处理突发流量增加?

这个属于监控信息采集的最小周期,太小(比如1秒或几秒)可能会导致监控程序占用过多机器资源。 如果你有更加精细敏感的伸缩需求,建议通过业务侧自己的监控去触发,腾讯云有提供主动触发伸缩策略执行的API满足你的灵活需求: https://cloud.tencent.com/docume...... 展开详请

对象存储通过直传首次上传成功后怎么使直传链接失效,防止重新上传?

可酷可乐

腾讯云 · 售后工程师 (已认证)

热爱云计算的小锅一枚。
推荐
从当前的签名机制上看,并不能做到使用后即失效。有两种方式可以降低风险。 1.在web直传模式中,需要向STS申请临时账号,临时账号生效的时间是由durationInSeconds参数控制,可以尽量缩短时间配置。 2.在申请STS时,需要设置policy,确保当前客户端只能上传到C...... 展开详请

API网关使用计划里的配额期限多久?

推荐已采纳

没有期限,比如绑定api维度,则说明这个api可以访问多少次,用完了会提醒

通过自行开发web前端从物联网平台获取数据?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐
你们可以自行开发小程序或者服务端接受数据,物联网平台了相关的API接口: 1.服务端API接口:https://cloud.tencent.com/document/product/1081/34957 2.应用端API接口:https://cloud.tencent.com/d...... 展开详请

localhost可以访问9200端口,外网无法访问9200端口,安全组是启用的?

推荐
localhost指向的是服务器的IPv6地址哦。 如果你需要能直接通过服务区公网IP访问常用两种方法 1. 可以将本地服务地址设置为0.0.0.0:端口号; 2.通过nginx代理本地IP地址和端口,并将其指向localhost:你的端口号,具体配置详见:https://www...... 展开详请

所属标签

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动