一旦下一个模态呈现的视图控制器以模态方式出现,就关闭或删除上一个以模态方式呈现的视图控制器

2023-11-24

我的目标包括很多视图需要根据每个用户操作以模态方式呈现不同的视图。我想要做的是获得更清晰的视图层次结构和更好的用户体验。

  1. 根视图控制器以模态方式呈现第一个视图控制器
  2. 当我单击第一个视图控制器上的按钮时,第二个视图控制器会以模态方式出现在其上方。
  3. 一旦第二个视图控制器出现,我想从视图层次结构中消除或删除第一个视图控制器。

我可以这样做吗?If so,我该怎么办?

If not,解决这个问题的正确方法是什么,因为我将在每个视图上呈现许多模态呈现的视图控制器。我认为即使我想关闭当前视图,当当前视图关闭时,前一个视图仍然会出现。

UPDATE :

VC1(根)> VC 2(模态存在)> VC 3(模态存在) 在 VC 上模态呈现 2)

当我解雇时VC3, the VC2仍在查看内存中。所以我不想出现VC2一旦我解雇VC3相反我想看看VC1通过删除或解雇VC2从视图层次结构。

enter image description here

WANT:在图像中,当我消除蓝色时,我不想在视图内存中看到粉红色,并且我想在蓝色出现时立即将其删除。

这就是我想做的。

有帮助吗?谢谢。


因此,我们假设您有一个类似于以下内容的故事板:

enter image description here

应该发生的是:

  • 呈现第二个 ViewController(来自第一个 ViewController)。
  • 呈现第三个 ViewController(来自第二个 ViewController)。
  • 解散到第一个 ViewController(从第三个 ViewController)。

在第三个 ViewController 按钮的操作中:

@IBAction func tapped(_ sender: Any) {
    presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil)
}

如您所见,通过访问呈现视图控制器当前 ViewController 的,您可以取消视图控制器的先前层次结构:

呈现此视图控制器的视图控制器。

通过实施presentingViewController?.presentingViewController?这意味着:当前 ViewController 的呈现:)

这可能看起来有点令人困惑,但它非常简单。

所以输出应该是这样的(我向 viewController 添加了背景颜色 - 如 vc1:橙色、vc2:黑色和 vc3:浅橙色 - 以使其显示清晰):

enter image description here

EDIT:

如果您要求删除中间的 ViewController(在本例中是第二个 ViewController),解雇(动画:完成:)自动执行此操作:

如果您连续呈现多个视图控制器,从而构建一个 呈现的视图控制器堆栈,在视图上调用此方法 堆栈中较低的控制器会解除其直接子视图 控制器以及堆栈上该子级之上的所有视图控制器。 发生这种情况时,只有最顶层的视图会在动画中消失。 时尚;任何中间视图控制器都被简单地从 堆。最顶层的视图使用其模态转换被关闭 style,可能与其他视图控制器使用的样式不同 位于堆栈的较低位置。

参考你所问的内容:

我想即使我想驳回当前的观点,前一个观点也会 当当前的一个解雇时仍然保留出现。

我认为这在用户界面上清晰可见(而且我觉得还可以),但正如dismiss文档讨论中,第三个和第二个都将从堆栈中删除。这是正确的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一旦下一个模态呈现的视图控制器以模态方式出现,就关闭或删除上一个以模态方式呈现的视图控制器 的相关文章

  • 更新/编辑 coreData 管理对象

    当用户单击 UITableView 中基于 cell accessoryType 的单元格时 我尝试编辑 CoreData 对象 以显示该项目是否已被单击 这是当前的代码 void tableView UITableView tableVi
  • 从其超级视图 iOS 7 问题中获取 UITableViewCell

    我的单元格中几乎没有具有手势识别器实例的 UI 对象 我需要获取按压对象所在的单元格 我有下面的方法来获取它 但它只在 iOS 7 之前有效 UITableViewCell cell UITableViewCell sender view
  • 向 Stripe 提交付款请求时出现“无此类令牌”错误

    我正在使用 Stripe API 设置付款 以允许用户在 iPad 上登录其 Stripe 帐户并接受任何人的付款 为此 我使用 Stripe Connect 登录并保存他们的帐户 ID 然后使用STPPaymentCardTextFiel
  • IOS:从故事板中的原型单元中触发多个segues

    有没有办法将原型单元连接到不同的场景 并在 didSelectRowAtIndexPath 方法上调用 self PerformSegueWithIdentifier NAMEOFTHESEGUE sender self 我似乎无法将多个
  • 将 IOS 中的应用程序功能限制为仅适用于 Cell/WiFi 数据。

    我已经在 StackOverFlow 上进行了搜索 但没有找到任何关于如何使用所需设备功能或UIRequiresPersistentWiFi 如何在我的应用程序中设置值 以便该应用程序仅适用于 iPhone 中的蜂窝数据 WiFi 目前 我
  • XCode 卡住了“复制符号文件”

    更新到最新版本 6 1 b2 后 Xcode 不再在设备上编译和运行项目 并显示 正在复制符号文件 几个小时 对于这个问题有什么想法或可能的解决方法吗 尝试使用另一根电缆或 USB 端口 其他 USB 端口为我修复了它 并在找到此 Twit
  • 以编程方式获取 Storyboard ID?

    尝试查看 UIViewController 或 UIView 是否可以识别其 Storyboard ID 所以希望 UIViewController aViewController NSString storyboardID aViewCo
  • 使用 DatePicker 展开和折叠 UITableViewCells

    我正在构建一个应用程序 让用户从 UITableView 中选择日期 tableView 是静态且分组的 我浏览了很多问题 包括this one https stackoverflow com questions 18973573 ios
  • Xcode:libpods.a 为红色

    有人知道为什么吗 我正在使用 SWRevealViewController 到目前为止它一直在工作 我正在使用工作区 并且我已经研究过其他文章 但到目前为止没有任何效果 它不会引发错误 但是当我运行程序时 它不会加载任何内容 因为 SWRe
  • Modal UINavigationController - 我无法停止旋转

    我正在使用故事板 并且在 UITabBarController 中嵌入了 UINavigationController 我推送一个视图控制器 然后从这个视图控制器中我呈现一个带有 UIViewController 的 MODAL UINav
  • Swift - 带有两行文本的 UIButton

    我想知道是否可以创建一个包含两行文本的 UIButton 我需要每一行都有不同的字体大小 第一行为 17 点 第二行为 11 点 我尝试过将两个标签放在 UIButton 内 但我无法让它们留在按钮的范围内 我试图在 ui 构建器中完成所有
  • 如何在 Objective-C 中运行时查找字符串常量?

    我的公司开发了一个广告 SDK 可以协调其他广告网络 在运行时 它通过使用检查其他广告网络是否存在NSClassFromString 并发送这些类消息 如果存在 这对于 Objective C 对象来说效果很好 但是如何在运行时加载字符串常
  • 删除 ios 和 android 的 PhoneGap 中的闪屏

    我正在尝试在 ios 和 android 的phonegap应用程序中完全删除启动屏幕 这navigator hide 函数仅在加载 html 页面后才起作用 但我需要在此之前删除启动屏幕 请告诉我是否有任何选项可以执行此操作 Cordov
  • 如何禁用 iOS 8 表情符号键盘?

    iOS 8 中是否有任何选项可以停止显示表情符号键盘 它在数字键盘和安全文本中不可用 但对于电子邮件来说它是存在的 如果无法禁用它如何从表情符号中获取字符串值 尝试这个 BOOL textField UITextField textFiel
  • 为什么UICollectionViewCell的outlet为nil?

    我在 Interface Builder 中创建了一个自定义 UICollectionViewCell 将其上的视图绑定到类 然后当我想使用字符串并将其设置为字符串上的标签时 该标签具有 nil 值 override func viewDi
  • 当应用程序置于后台时,GCD 分派操作未运行

    我启动了一种方法 本质上是一个无限循环 使用dispatch queue create进而dispatch async 然后代码循环位于分派块内 循环完美运行 但是 当应用程序进入后台时 它会暂停 然后当应用程序进入前台时它会重新启动 我怎
  • macOS:以编程方式检查进程是否作为 launchDaemon 或 launchAgent 运行或从命令行运行

    我想了解我的进程运行的上下文 我想区分以下情况 它作为持久计划任务运行 launchDaemon launchAgent 它被称为按需并由 launchd 使用创建open命令行或双击 它是直接从命令行终端调用的 即 gt bin myPr
  • 如何使我的响应式网站在手机上支持“请求桌面网站”?

    我有一个响应灵敏的动态网站 Java Servlet 驱动且完全手工编码 由于它是一个返回数据表的科学站点 因此某些选项在较小的视口宽度下不可用 然而 可能有些用户更喜欢在桌面网站上挣扎才能访问这些选项 我希望适应他们 我的问题是 对于 i
  • 使 Picker 与其他 BinaryInteger 类型兼容

    Picker仅当与以下一起使用时才能正常工作Int 当使用任何其他类型的BinaryInteger它根本不更新选择 为了解决这个问题 我想做一个CompatilibityPicker但我必须承认我的理解Binding实际上工作给我带来了很多
  • 如何解决 Xcode 7 中的 No Type or Protocol Named 错误?

    我试图passing从第二个开始的值class我正在使用的头等舱protocol and delegate过程 每当我运行我的程序时 我都会遇到以下问题 No Type or Protocol Named locateMeDelegate

随机推荐