关闭 ModalViewController 后刷新父 ViewController

2024-01-23

在我的 iOS 应用程序中,用户可以从列表中选择图像,然后会看到一个包含该图像和删除该图像的选项的模式。如果用户选择删除图像,她将返回到包含图像列表的原始视图控制器。然后我需要刷新原始 ViewController 以考虑已删除的图像。

我尝试使用 NSNotificationCenter 在图像被删除到父视图控制器时进行广播。然而,似乎从未收到过广播。

还有其他方法吗

  1. 模式关闭后将数据发送回父 ViewController,并且
  2. 检测模式何时从父 ViewController 中消失?

(我尝试按照概述的示例here https://stackoverflow.com/questions/10387039/how-can-i-detect-the-dismissal-of-a-modal-view-controller-in-the-parent-view-con,但似乎不起作用)

下面是我的代码:

EditStepViewController(原始视图控制器):

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MediaPreviewViewController *mediaPreviewVC = (MediaPreviewViewController *)[storyboard instantiateViewControllerWithIdentifier:@"MediaPreviewViewController"];
mediaPreviewVC.selectedImageURL = [NSString stringWithFormat:@"%@",gestureRecognizer.view.tag];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mediaPreviewVC];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didDismissMediaPreview)
                                             name:@"MediaPreviewDismissed"
                                           object:nil];
[self presentViewController:navigationController animated:YES completion:nil];

MediaPreviewViewController(第二个ViewController):

 ...
 [self deleteImage];
 [[NSNotificationCenter defaultCenter] postNotificationName:@"MediaPreviewDismissed" object:nil userInfo:nil];
 [self dismissViewControllerAnimated:YES completion:^(){
   NSLog(@"dismissed controller");
  }];

然后,回到 EditStepViewController:

-(void)didDismissMediaPreview{
    NSLog(@"dismissed media preview"); // this is never logged!
    [self.view setNeedsDisplay]; // refresh view to account for deleted image
}

在此先感谢您的帮助!


就我而言,我通常在这里使用块。

例如你有父视图控制器.h

@interface ParentViewController : UIViewController
@end

执行父视图控制器.m

// INCLUDE HERE THE MODAL CONTROLLER TO HAVE ACCESS TO ITS PUBLIC PROPERTY
#import ModalViewController.h

@implementation ParentViewController

// implement your modal dismiss block here
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   // DEFINE HERE THE CALLBACK FUNCTION
   // 1. get the model view controller
   ModalViewController *mvc = [segue destinationViewController];

   // 2. Your code after the modal view dismisses
   mvc.onDismiss = ^(UIViewController *sender, NSObject *objectFromModalViewController)
   {
       // Do your stuff after dismissing the modal view controller
       .
       .
       .
   }
} 
@end

And, 模态视图控制器.h

@interface ModalViewController : UIViewController

// call back function, a block
@property (nonatomic, strong) void (^onDismiss)(UIViewController *sender, NSObject *objectYouWantToPassBackToParentController)
@end

ModalViewController.m

@implementation ModalViewController

.
.
.

// your dismiss function say
- (IBAction)dismissViewController:(id)sender
{
   ... 

   [self deleteImage];

   [self dismissViewControllerAnimated:YES completion:^
   {
      // MAKE THIS CALL
      self.onDismiss(self, theOjectYouWantToPassBackToParentVC);
   }];
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关闭 ModalViewController 后刷新父 ViewController 的相关文章

  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho
  • 文本溢出:省略号显示不同的字符

    我这里遇到了一些 CSS 问题 看这张图片 https www flickr com photos 125543025 N07 saved 1 在此图像中 我为文本 INTENSE TRAINING 添加了 CSS 样式 sample st
  • 我们什么时候应该在 Django 中使用“db_index=True”?

    当我们应该定义db index True在模型字段上 我正在尝试优化应用程序并且我想了解更多信息db index 什么情况下我们应该使用它 文档说使用db index True在模型字段上用于加速查找 但在存储和内存方面略有缺点 我们应该使
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code
  • 如何在 kubernetes 中将秘密标记为可选?

    来自文档 除非将秘密标记为可选 否则必须先创建秘密 然后再将其作为环境变量在 pod 中使用 引用不存在的 Secret 将阻止 pod 启动 如何将秘密标记为可选 您正在寻找的是 name ENV NAME valueFrom secre
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • If else 在 Web 网格列中

    如何在 webgrid 列中添加条件 if else grid GetHtml tableStyle table table bordered columns grid Columns grid Column RealName Name g
  • Azure Functions 计时器触发器线程安全

    我想知道是否有人知道如果您在 Azure 函数上设置了 Cron 设置 如果其任务执行时间超过 5 分钟 则每 5 分钟运行一次 会发生什么情况 它备份吗 或者我应该实现一个锁定功能 以防止某些东西 例如在循环中 处理先前调用已经处理的数据
  • SimpleIoC - 在缓存中找不到类型:Windows.UI.Xaml.Controls.Frame

    第一次由 SimpleIoC 实例化我的 ViewModel 时 我遇到了以下错误 我相信我已经按应有的方式设置了容器 但由于某种原因 我仍然收到以下错误 任何想法或帮助将非常感激 Microsoft Practices ServiceLo
  • svn 强制迁移

    我正在考虑将我们的 svn 代码库迁移到 perforce 看看谷歌搜索结果 我确实找到了两个具有相同功能的工具 P4转换ftp ftp perforce com pub perforce tools p4convert docs inde
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用
  • PLS-00103:遇到符号“;”当预期出现以下情况之一时:

    我正在尝试插入用户安全问题的答案 以用于密码重置功能 Ellucian 横幅 v8 提供了一个用于运行此 API 的 API 我对他们的 API 非常陌生 从下面的错误消息来看 我还远远没有正确运行它 任何帮助表示赞赏 我尝试在 Oracl
  • 自定义字符串查询操作的 Linq to NHibernate 可扩展性?

    我希望能够在 NHibernate Linq 表达式中使用自定义字符串查询 举例来说 这只是一个例子 我希望能够选择包含属性的实体 该属性是特定字符串的字谜 var myEntities EntityRepository AllEntiti
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci

随机推荐

  • 具有自适应宽度的
  • 元素
  • 我想知道是否可以在 CSS 中做到这一点 而不需要 javascript N 的列表 li items 内联显示 等宽 且宽度全部等于容器的宽度 我可以有3个 li li 项 在本例中为 li li 宽度将为 33 或者我可以有 4 li
  • 什么是好的正则表达式?

    我已经工作了 5 年 主要从事访问 Oracle 数据库的 java 桌面应用程序 我从未使用过正则表达式 现在我进入Stack Overflow 看到很多关于它们的问题 我感觉我错过了什么 你用正则表达式做什么 附 对不起 我的英语不好
  • java.sql.SQLException:找不到适合 jdbc 的驱动程序:hive://localhost:10000/default

    我是 Hadoop 和生态系统的新手 我正在尝试使用 Java 中的 JDBC 来使用 Hive 这是我的简单代码 仅用于测试驱动程序 import java sql DriverManager import java sql SQLExc
  • 什么重建 tsconfig.json?

    在 Mac 上 使用 Sublime Text 3 和 Microsoft Typescript 包 当我添加 ts 文件时 我在 tsconfig 文件中有一个 filesGlob 条目 并且我认为某些东西或某人会根据找到的内容自动扩展
  • 错误:无法启动 nginx,因为网络无法在 alpine docker 镜像上启动

    我们正在尝试在基于 java 的 alpine 镜像上安装并运行 nginx anapsix alpine java 7 jdk 但是当我们启动它时我们面临以下错误 rc service nginx start lib rc sh open
  • 我们可以在 Coldfusion 中续订会话吗?

    我在会话中存储 5 6 个变量值 关于如何在会话结构即将过期时更新会话结构 有什么建议吗 我正在使用 Coldfusion 8 谢谢 使用 AJAX 对服务器执行 ping 操作以保持会话处于活动状态 或者只是简单地延长会话超时timeSp
  • 在Android中绘制像跳棋一样的游戏板

    我想设计一个游戏板 例如西洋跳棋 但可以有不同的棋盘图块 现在 面向对象的逻辑和推理告诉我 我应该有一个可以绘制的 tile 类 并且我在一张画布上绘制 x x y 个此类 我的问题是绘制这样一块板的最佳性能方法是什么 按照我上面提到的方式
  • 获取 clojure 函数的代码

    clojure 有没有办法在函数加载后获取函数的代码 IE 不做类似 未经测试 的事情 defmacro blat x do def code quote mexpand all x x blat defn func abc 您可以使用以下
  • 如何在 iOS 上下载并解压文件

    我想为我的应用程序下载一个包含 mp3 的 zip 文件 然后 我需要将其解压缩到一个永久目录中 其中包含要按需播放的 mp3 这是一个词汇应用程序 zip 文件包含要提取的 mp3 zip 文件大约 5 MB 更多问题 将这些内容下载到哪
  • Appium Doctor - 无法在 MacOS 10.12 上将 $JAVA_HOME/bin 设置为 PATH 变量

    在 MacOS 10 12 上使用 npm 安装了 appium doctor 它给了我一个错误 WARN AppiumDoctor Bin directory for JAVA HOME is not set 到目前为止我已经尽力了 请帮
  • 将curl命令从google-colab转换为python脚本

    我有以下谷歌colab代码 code wget https bin equinox io c 4VmDzA7iaHb ngrok stable linux amd64 zip unzip ngrok stable linux amd64 z
  • Boost Python Numpy - 未定义的初始化引用

    我在链接以下代码时遇到问题 include
  • nuget 包上“找到的程序集的清单定义与程序集引用不匹配”

    所以我在 System Web Optimization 包上不断收到此错误 无法加载文件或程序集 System Web Optimization 或其依赖项之一 找到的程序集的清单定义与程序集引用不匹配 HRESULT 异常 0x8013
  • 如何修复错误:错误#2044:未处理的 IOErrorEvent:。 text=错误 #2035:找不到 URL

    我使用该代码并收到错误 消息 错误 2044 未处理 IO错误事件 文本 错误 2035 URL 未找到 var myLoader Loader new Loader addChild myLoader var url URLRequest
  • 如何使用DiagrammeR 创建网络图?

    我有一个很大的数据集 但让我们举一个简单的例子 mydata lt data table from c John John Jim to c John Jim Jack nodesd unique c mydata from mydata
  • Firebase Android ListView 未显示

    我试图在用户登录后在主菜单屏幕的列表视图上显示 Firebase 实时数据库中的数据 应用程序正在运行 但不显示数据 这是我数据库中的数据 现在来说说代码 MainMenu java 该函数在 OnCreate 上调用 public voi
  • Dart 库/包关键字的含义?

    Is 飞镖库一模一样Java包 Is 飞镖包一模一样Java库 JAR 包是一组库 例如可以部署到 pub dartlang org 我猜这类似于 jar 文件 库是一个带有或不带有名称的 Dart 脚本文件 或者一组带有名称的 Dart
  • 在 Android Studio 项目中使用 libsodium

    我正在尝试在 android studio 项目中使用 libsodium 库 但是 我无法弄清楚如何做到这一点 我从 libsodium 网站下载了该库 但不明白如何创建 android studio 项目所需的库文件 任何帮助将不胜感激
  • 为什么递归函数只遍历一个子目录

    我已经找到了让我的代码正常工作的答案 但我想知道为什么它可以工作而我的代码却不能 rFunc for d in do if d d then cd d rFunc fi Do Something done 这段代码只会通过一个子目录 但如果
  • 关闭 ModalViewController 后刷新父 ViewController

    在我的 iOS 应用程序中 用户可以从列表中选择图像 然后会看到一个包含该图像和删除该图像的选项的模式 如果用户选择删除图像 她将返回到包含图像列表的原始视图控制器 然后我需要刷新原始 ViewController 以考虑已删除的图像 我尝