首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在使用Swift呈现新的Viewcontroller后取消以前的Viewcontroller?

在使用Swift呈现新的Viewcontroller后,取消以前的Viewcontroller,可以通过以下几种方法实现:

  1. 使用导航控制器(UINavigationController):如果你的Viewcontroller是嵌套在导航控制器中,你可以使用导航控制器的popViewController方法来取消当前的Viewcontroller,并返回到上一个Viewcontroller。具体操作如下:
代码语言:txt
复制
navigationController?.popViewController(animated: true)

这会将当前的Viewcontroller从导航堆栈中移除。

  1. 使用模态视图(Modal Presentation):如果你使用present方法将新的Viewcontroller以模态视图的方式呈现出来,你可以使用dismiss方法来取消当前的Viewcontroller,返回到上一个Viewcontroller。具体操作如下:
代码语言:txt
复制
dismiss(animated: true, completion: nil)

这会将当前的Viewcontroller关闭并返回到呈现它的Viewcontroller。

  1. 使用代理(Delegate)模式:如果你在新的Viewcontroller中有一个代理属性,并在取消操作时调用代理方法,你可以通过代理模式来取消当前的Viewcontroller。具体操作如下:

在新的Viewcontroller中定义代理协议和代理属性:

代码语言:txt
复制
protocol ViewControllerDelegate: AnyObject {
    func viewControllerDidCancel(_ viewController: UIViewController)
}

class NewViewController: UIViewController {
    weak var delegate: ViewControllerDelegate?

    // 取消按钮点击事件
    @IBAction func cancelButtonTapped(_ sender: UIButton) {
        delegate?.viewControllerDidCancel(self)
    }
}

在呈现新的Viewcontroller的地方,设置当前Viewcontroller为代理,并实现代理方法:

代码语言:txt
复制
class CurrentViewController: UIViewController, ViewControllerDelegate {
    // 呈现新的Viewcontroller
    func presentNewViewController() {
        let newViewController = NewViewController()
        newViewController.delegate = self
        present(newViewController, animated: true, completion: nil)
    }

    // 实现代理方法
    func viewControllerDidCancel(_ viewController: UIViewController) {
        dismiss(animated: true, completion: nil)
    }
}

这样,在新的Viewcontroller中点击取消按钮时,会调用代理方法,从而取消当前的Viewcontroller。

  1. 使用通知中心(Notification Center):如果你在新的Viewcontroller中发送一个取消的通知,你可以在之前的Viewcontroller中监听该通知,并在收到通知时取消当前的Viewcontroller。具体操作如下:

在新的Viewcontroller中发送取消通知:

代码语言:txt
复制
@IBAction func cancelButtonTapped(_ sender: UIButton) {
    NotificationCenter.default.post(name: NSNotification.Name("CancelNotification"), object: nil)
}

在之前的Viewcontroller中监听通知,并实现对应的取消方法:

代码语言:txt
复制
class CurrentViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(cancelViewController), name: NSNotification.Name("CancelNotification"), object: nil)
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    @objc func cancelViewController() {
        dismiss(animated: true, completion: nil)
    }
}

这样,在新的Viewcontroller中点击取消按钮时,会发送一个名为"CancelNotification"的通知,之前的Viewcontroller监听到该通知后,会调用取消方法,从而取消当前的Viewcontroller。

以上是几种常见的在使用Swift呈现新的Viewcontroller后取消以前的Viewcontroller的方法。根据你的具体需求和场景,选择适合的方法来实现取消操作。对于Swift的开发,你可以使用腾讯云的云开发产品,如Serverless云函数(SCF)来进行函数计算,提供后端服务支持。另外,腾讯云还提供了腾讯云开发工具包(TencentCloud SDK),可以帮助你在开发过程中使用各类腾讯云服务。详细了解和使用腾讯云开发产品和工具,请访问腾讯云官方网站:https://cloud.tencent.com/。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

平面检测-搜索真实世界表面

水平平面检测 首先,我们需要打开配置平面检测属性并将其设置为水平,以检测平面(地板或桌子)。...右键单击ViewController.swift并选择新建文件...。然后,在Source下选择Swift File,点击Next。...导入套件 一旦创建了Swift文件ViewController + ARSCNViewDelegate.swift,就会自动导入Foundation框架。它是我们不需要应用程序基础框架。...在ViewController.swift文件中,将其删除。当我们在它时,向下滚动并删除Mark下注释掉代码,这是该协议下一个方法给定示例。Mark帮助我们分离文件中代码段。...您现在正在学习如何在代码中应用它。 飞机位置 所以,就像我们为手表所做步骤一样,我们需要定位它。将平面节点放在检测到曲面的中心。

2.9K30
  • 将模型添加到场景中 - 在您环境中显示3D内容

    现在,我们拥有显示虚拟对象所需所有工具。在本教程中,我们将学习如何检索模型并使用按钮触发器将其呈现在场景中。一旦显示,我们将隐藏焦点方块。...在右侧,我们有ViewController.swift,在那里我们可以找到该出口声明。单击并拖动左侧圆圈,它应该是第15行,然后释放到ARSCNView上。现在,关闭助理编辑。...import UIKit import SceneKit import ARKit extension ViewController {} 检索模型 在扩展内部,创建一个函数来检索我们选择模型是一个很好主动...在ViewController.swift中,将一个类变量声明为一个节点数组,我们将其初始化为空。...这些行动将运行根据是否隐藏是真还是假,一前一。为此目的使用序列。

    5.5K20

    使用SWRevealViewController实现侧滑菜单

    1.导入SWRevealViewController 由于该库是用OC写,所以在swift使用还需要一些步骤; 1.1 下载SWRevealViewController到本地,然后打开SWRevealViewController...Header;苹果官方推荐通过header file文件来让Swift项目使用OC 1.3 然后xcode就会创建一个 项目名-Bridging-Header.h文件,打开该文件,输入: #import...2.使用SWRevealViewController (storyboard方式) 2.1 拖拽一个View Controller到面板上,并设置class 为SWRevealViewController...2.2 创建菜单 View Controller,这里可以为任何类型, 2.2.1 创建完成,左键点击SWRevealViewControllerView Controller并按住control...点击两个ViewController 之间链接线,在属性面板设置identifier 为sw_rear(不可为其他字符) 2.3 链接要显示侧滑菜单ViewController ; 2.2.1

    1K20

    iOS 9 Storyboard 教程(二下)

    , game: "Chess", rating: 1) } } prepareForSegue(_:sender:)使用默认游戏和评级变量,创建了一个Player实例.它只是为带有SavePlayerDetail...直到你segue他们,其他viewController才被实例化.当你关闭这些viewController时候,他们就立即被释放了.所以只有使用ViewController才存在内存中....(coder:)输出状态信息.这就会是你相信了,ViewController是在使用时候才加载....为这个工程添加一个Swift文件,使用Cocoa Touch Class模板,命名为GamePickerViewController,继承自UITableViewController....这个方法在点击之后就会取消选中.那使得它从灰色高亮褪色为正常白色.然后它就会从先前选中单元格移除对号标记,然后把对号放到刚刚点击那一行上.

    2.2K10

    一文读懂Xcode 9 所有更新:全新模拟器,兼容Swift低版本等

    另外,这次 Xcode 9 还解决了重命名在 Swift 语言中一个老问题,就是: 常用 Swift 同学应该都知道这个,以前版本 Xcode 不支持 Swift 语言重命名操作。...Swift 低版本兼容 XCode 9 使用 Swift 4 编译器。 这次编译器同时可以支持 Swift 3, 这样就不用立即修改项目的 Swift 代码了。...前几个版本 Xcode 升级,都会带来 Swift 编译器升级,而之前升级都是不做向下兼容,必须把整个项目的代码都修改一遍。...我们都知道,Xcode 左边栏中黄色小文件夹叫做 Group: 在以前 Xcode 版本中, 直接在这里面移动文件是不会影响文件系统位置,比如把 ViewController.swift 文件移动到...总结 总体来说,Xcode 9 这次升级相比以前版本,算是一个步伐很大更新。 全新模拟器,Wifi 调试,构建系统,对 Swift 更加完善支持,等等这些,都算是一次质飞跃。

    1.8K70

    聚焦位置-选择您喜欢位置放置虚拟物体

    焦点方块 Focus Square 类 首先,我们将为Focus Square创建一个类,以便我们可以个性化其风格和状态。让我们为焦点方块添加一个Swift文件。...super.init(),声明一个平面并分配一个恒定宽度和高度0.1这个时候。...类变量 为此,请转到ViewController.swift文件。我们将首先在sceneView声明之后为焦点方块声明一个类变量。它将是具有焦点方形类属性节点。...屏幕中心 让我们回到ViewController.swift并为屏幕中心声明另一个变量。我们将它用作焦点方块参考点,以便在我们移动相机时跟随它们。屏幕中心始终存在,因此它不是可选。...焦点方块更新 接下来,我们想对焦点方块进行其他类型更新。在viewWillDisappear之后ViewController.swift中,为更新创建一个函数。

    2.4K30

    ARKit 教学:如何搭配SceneKit来建立一个简单ARKit Demo设定ARKit SceneKit View从ARSCNView移除物件

    image 然后将你ARKit SceneKit View尺寸拉满整个View Controller,它应该会呈现如下方: ?...image 这样的话,ARKit SceneKit View就是我们要呈现增强现实SceneKit内容位置。...连接IBOutlet 我们目前仍在Main.storyboard位置,请往介面右上方找到toolbar,并开启Assistant Editor,现在将ARKit连接到ViewController.swift...档位置: import ARKit 接着请按住control并在ARKit ScenKitView上拖到至ViewController.swift,当连接到时,请指定为IBOutlet,并命名为sceneView...是时候来做些点击手势辨识方法物件内调用方法 从ARSCNView移除物件 在ViewController.swift加入下列代码: @objc func didTap(withGestureRecognizer

    1.8K20

    Swift:静态工厂方法

    尤其是在使用子视图控制器时,我们通常最终会得到一组视图控制器,它们只能在其中呈现特定状态,而不是在其中包含大量逻辑。对于那些视图控制器,将其设置移动到静态工厂API可能是一个很好解决方案。...) ]) return viewController } } 您在上面看到,我们甚至可以在静态属性或函数中设置内部“自动布局”约束...使用默认参数是一种简单方式,这不需要我们添加方法: extension User { static func makeStub(age: Int = 30,...如果您想了解有关此类对象以及我通常使用工厂模式其他方式更多信息,请查看"Swift使用工厂模式以避免共享状态","Swift使用工厂进行依赖注入"和"Swift: 使用懒加载属性"。...文章来自 John SundellStatic factory methods in Swift简单翻译了一下,希望对大家有用 附: 文中静态工厂方法swift5.0才支持 我们也可以使用类方法实现类似功能

    2.4K10

    Swift| 基础语法(五)

    前言 总结下 swift基础语法,里面涉及到:常量&变量、Swift数据类型、逻辑分支、循环、字符串相关、数组和字典、方法书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift...、UIButton、UIImageView使用 UITableView使用 UITableView使用 单例 从相册选择照片或者拍照 ---- 一、纯代码创建应用根试图 func application...对象、并使用ViewController界面布局文件来 // 初始化该视图控制器关联用户界面 let vc = ViewController() //通过控件加载视图...viewController视图控制器关联用户界面 self.window?....} 在Swift中,创建tableViewCell方法可以分为两种创建tableView时候注册和需要使用时手动创建。先聊聊创建tableView时候直接注册cell: myTb?.

    2K30

    Swift 项目 - Xib | StoryBoard 多人协作技巧

    说到底,臃肿Storyboard和臃肿ViewController一样,都是难以维护且容易git冲突。唯一解决方案就是有节制使用工具。...一个占位容器视图指向子控制器Embed Segue 按住Control键连线到想要包含子控制器,占位视图实例==子控制器view(子控制器根视图) 选择Embed连线方式,子控制器 尺寸变化成跟占位视图一样尺寸...ChildViewController 可以通过 self.parent(Swift)|| self.parentViewController(OC)来拿到主ViewController实例。...实际上约束布局是一个很强大功能,可以解决绝大多数(98%)布局适配问题,98%这个数并不是随便给出,很多人觉得达不到这个比例是因为对约束理解较少,还是按照以前autolayoutMask方式使用约束...StoryBoard 或 Xib上使用约束技巧,可以参考文章《纯Swift项目-Xib | StoryBoard 设备适配技巧[2]》及 《纯Swift项目-Xib | StoryBoard 约束使用技巧

    2.1K20

    View Controller编程指南

    呈现ViewControllers 呈现ViewController会将当前ViewController内容替换为ViewController内容,通常会隐藏前一个ViewController内容...演示文稿最常用于模态地显示内容。 例如,您可能会提供一个ViewController来收集用户输入。 您也可以将它们用作应用程序界面的一般构建块。...在呈现ViewController时,UIKit会在呈现ViewController呈现ViewController之间创建一个关系,如图所示。...(从呈现ViewController返回到它呈现ViewController也有相反关系。)...大多数系统ViewController是为特定任务而设计 某些ViewController提供对用户数据(联系人)访问。 其他人可能提供访问硬件或提供专门调整界面来管理媒体。

    1.3K20

    Swift使用工厂进行依赖注入

    这样我们就可以很容易地从任何地方访问它,并通过简单地使用共享实例将其注入MessageViewController中: let viewController = MessageViewController...( message: message, sender: MessageSender.shared ) 然而,就像我们在 "避免在Swift使用单例 "中看到那样,单例方法也有一些明显缺点...= factory.makeMessageViewController(for: message) 就像我们在 "使用工厂模式来避免Swift共享状态 "中看到那样,我非常喜欢工厂一点是,它可以让你完全解耦对象使用和创建...由于我们已经将所有的工厂定义为协议,我们可以通过实现任何给定工厂协议特定测试版本,在测试中轻松地模拟它们。我将在未来博文中写更多关于模拟和如何在测试中充分利用依赖注入内容。 你怎么看?...你以前使用过像这样解决方案吗,或者你会尝试一下吗? 感谢您阅读 译自 John Sundell Dependency injection using factories in Swift

    83020
    领券