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

呈现下一个使用Swift解除当前ViewController的ViewController

使用Swift解除当前ViewController的ViewController有多种方法,以下是其中几种常用的方法:

  1. 使用dismiss方法解除当前ViewController:

在当前ViewController中调用以下代码来解除当前ViewController:

代码语言:txt
复制
self.dismiss(animated: true, completion: nil)

该方法会以动画的形式解除当前ViewController,并触发解除后的回调闭包。

  1. 使用navigationController的popViewController方法解除当前ViewController:

如果当前ViewController是由navigationController管理的,可以使用以下代码来解除当前ViewController:

代码语言:txt
复制
self.navigationController?.popViewController(animated: true)

该方法会将当前ViewController从导航堆栈中移除,并返回上一个ViewController。

  1. 使用navigationController的popToRootViewController方法解除所有ViewController:

如果想一次性解除当前ViewController及其之前的所有ViewController,可以使用以下代码:

代码语言:txt
复制
self.navigationController?.popToRootViewController(animated: true)

该方法会将导航堆栈中的所有ViewController都移除,只保留根ViewController。

  1. 使用delegate模式解除当前ViewController:

在当前ViewController中定义一个delegate协议,并在需要解除当前ViewController的地方调用delegate方法。具体步骤如下:

首先,在当前ViewController中定义delegate协议:

代码语言:txt
复制
protocol ViewControllerDelegate: AnyObject {
    func dismissViewController()
}

然后,在当前ViewController中创建一个delegate属性,并在解除当前ViewController的地方调用delegate方法:

代码语言:txt
复制
class CurrentViewController: UIViewController {
    weak var delegate: ViewControllerDelegate?
    
    // 解除当前ViewController的动作
    func dismissCurrentViewController() {
        delegate?.dismissViewController()
    }
}

最后,在上一个ViewController中实现delegate协议,并设置当前ViewController的delegate为上一个ViewController:

代码语言:txt
复制
class PreviousViewController: UIViewController, ViewControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let currentViewController = CurrentViewController()
        currentViewController.delegate = self
    }
    
    // 实现delegate方法
    func dismissViewController() {
        self.dismiss(animated: true, completion: nil)
    }
}

这样,当调用dismissCurrentViewController()方法时,就会触发delegate方法,从而解除当前ViewController。

这是使用Swift解除当前ViewController的几种方法,具体使用哪种方法取决于具体的场景和需求。在实际开发中,可以根据需要选择适合的方法进行解除。

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

相关·内容

iOS学习——获取当前最顶层ViewController

在iOS开发过程中,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层ViewController上展示一个UIAlertController...在寻找过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController情况,同时还要考虑到当前ViewController是否通过...: UIViewController *topmostVC = [self topViewController]; 方法二: //获取当前屏幕显示viewcontroller - (UIViewController...作为导航结构,以及可能present出新VC,其实如果用storyboard方式写UI的话就很清晰,类似树结构,再利用递归找到当前视图。...) UIViewController * _Nullable currentVC; //当前屏幕显示viewcontroller -(UIViewController *)currentVC{ UIViewController

6.6K50

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

现在,我们拥有显示虚拟对象所需所有工具。在本教程中,我们将学习如何检索模型并使用按钮触发器将其呈现在场景中。一旦显示,我们将隐藏焦点方块。...为了能够正确添加我们按钮,我们必须删除当前 ARSCNView并首先从对象库添加UIView作为底层。接下来,选择相同ARKit SceneKit View并将其放回UIView之上。...在右侧,我们有ViewController.swift,在那里我们可以找到该出口声明。单击并拖动左侧圆圈,它应该是第15行,然后释放到ARSCNView上。现在,关闭助理编辑。...让我们转到ViewController.swift并剪切动作函数addObjectButtonTapped并将其粘贴到这里以将其全部放在一个地方。...在ViewController.swift中,将一个新类变量声明为一个节点数组,我们将其初始化为空。

5.5K20
  • iOS性能优化之启动优化

    ,仅限当前项目中符号,例如:NSLog等外部符号不会被HOOK 二进制重排本意,就是将代码实现二进制中方法/函数符号,在启动时刻按照顺序排列在前面。...,达到方法/函数/Block100%覆盖 相当于编译器在编译时期,修改了当前二进制文件 修改时机,有可能是语法分析之后,生成IR中间代码时进行修改(未验证) 5.5 获取符号名称 示例代码中,使用了一个...,next存储下一个节点地址 收集 创建结构体,对pc赋值,next设置为NULL 结构体入栈 offsetof:宏,参数1传入类型,将下一个节点地址返回给参数2 测试 循环读取node,取空则停止循环...而Swift使用swiftc编译器,要想获得swift函数符号,需要对Other Swift Flags进行配置\ 和Clang配置参数略有出入\ 添加-sanitize-coverage=func...混编,成功得到Swift函数符号

    1.8K11

    module & Swift

    例如:当前test.m被编译成目标文件test.o时,当前目标文件就代表了一个module 这里有一个问题,module在调用时候会产生开销,当使用一个静态库时:@import TestStaticFramework...,当前就是clang 加载modulemap文件路径 对应Build Setting中配置项 打开ViewController.m,写入以下代码: #import "ViewController.h...SwiftProject链接OCFramework动态库 在ViewController.swift中,使用OCFramework动态库方法,出现以下问题: 无法对LGTeacherNameString...NS_REFINED_FOR_SWIFT宏,SwiftClang Importer将做一些额外工作,将该方法导入为私有方法,并以双下划线字符__开头 在SwiftProject中,打开ViewController.swift...(模块):最小代码单元,表示头文件与目标文件关系undefined modulemap:最小代码单元,表示头文件与目标文件映射 定义一个module: export:导出当前代表头文件使用头文件

    2.1K45

    使用SWRevealViewController实现侧滑菜单

    1.导入SWRevealViewController 由于该库是用OC写,所以在swift使用还需要一些步骤; 1.1 下载SWRevealViewController到本地,然后打开SWRevealViewController...Header;苹果官方推荐通过header file文件来让Swift项目使用OC 1.3 然后xcode就会创建一个 项目名-Bridging-Header.h文件,打开该文件,输入: #import...点击两个ViewController 之间链接线,在属性面板设置identifier 为sw_rear(不可为其他字符) 2.3 链接要显示侧滑菜单ViewController ; 如2.2.1...) 结果如图,这里要注意一个问题,就是指向第一个显示ViewController箭头 指向了SWRevealViewController; 因为我在实际开发中发现不指向这个ViewController...self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) } 如果你想判断当前菜单是否在打开状态

    1K20

    Swift:静态工厂方法

    尤其是在使用子视图控制器时,我们通常最终会得到一组视图控制器,它们只能在其中呈现特定状态,而不是在其中包含大量逻辑。对于那些视图控制器,将其设置移动到静态工厂API可能是一个很好解决方案。...特别是如果与"Swift:将子视图控制器用作插件" 中便捷API稍加修改版本结合使用,我们现在可以在执行异步操作时轻松添加预先配置加载视图控制器: class ProductListViewController...假设我们应用程序中有一个User模型,其中包含给定用户具有什么样权限,并且我们许多测试都是基于当前用户权限来验证我们逻辑。...如果您想了解有关此类对象以及我通常使用工厂模式其他方式更多信息,请查看"Swift使用工厂模式以避免共享状态","Swift使用工厂进行依赖注入"和"Swift: 使用懒加载属性"。...文章来自 John SundellStatic factory methods in Swift简单翻译了一下,希望对大家有用 附: 文中静态工厂方法swift5.0才支持 我们也可以使用类方法实现类似功能

    2.4K10

    窥探Swift之协议(Protocol)和委托代理(Delegate)回调使用

    说到协议,在Objective-C中也是有协议,并且Swift协议和Objc中协议使用起来也是大同小异,在Java等现代面向对象编程语言中有接口(Interface)概念,其实和Swift中或者...我们在UIViewController上贴了一层UITableView, 所以我们需要在相应ViewController对应Swift源码中进行UITableView绑定,并实现UITableViewDatasource...上面使用委托回调主要是使用Swift协议(Protocol)来实现。那么如何使用协议来实现你自己委托回调呢?这将是下面将要介绍内容。   二....上面实例意思就是把下一个页面的值通过委托代理回调形式传到上个页面中去,在前面的博客《窥探Swift之函数与闭包应用实例》中也做了同样事情,不过之前我们是使用闭包(Closure)回调来实现。...上面的场景在iOS开发中极为常见,使用场景也是比较广泛。所以协议无论在Swift还是在iOS开发中都是极为重要概念之一。

    3.5K80

    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

    iOS循环引用

    iOS循环引用 当前闭包/Block属性,用到了当前类,就会造成循环引用 此闭包/Block应该是当前属性,我们经常对Block进行copy,copy到堆中,以便后用。...swift 中闭包循环引用情况 class ViewController: UIViewController { // 1.闭包是当前类属性 var allCallBack :(()->...completionBack() } } } // 当对象销毁时会调用 deinit { print("销毁了") } } 解除循环引用...方式 方案一: 使用weak,对当前控制器使用弱引用 // 解决方案一: /* 细节1:var ,weak 只能修饰var,不能修饰 let 'weak' must...view) } 方案三: 使用关键字unowned 从行为上来说 unowned 更像OC中 unsafe_unretained unowned 表示:即使它原来引用对象被释放了,仍然会保持对被已经释放了对象一个

    79250

    iOS - RxSwift 项目实战记录

    ReactiveX 最近刚刚把接手OC项目搞定,经过深思熟虑后,本人决定下个项目起就使用Swift(学了这么久Swift还没真正用到实际项目里。。。)...HUD 敲黑板 Moya使用 Moya是基于Alamofire网络请求库,这里我使用了Moya/Swift,它在Moya基础上添加了对RxSwift接口支持。...ViewModel规范 我们知道MVVM思想就是将原本在ViewController视图显示逻辑、验证逻辑、网络请求等代码存放于ViewModel中,让我们手中ViewController瘦身。...当前刷新状态 let refreshStatus = Variable(.none) 我们在进行网络请求并得到结果之后,修改refreshStatusvalue为相应...models,当models值被修改时候会发信号给sections,sections在ViewController已经绑定到tableViewitems了,所以此时tableView数据会被更新

    2.9K41

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

    实际使用例子参见《纯Swift项目-Xib | StoryBoard 设备适配技巧》[1]或其他StoryBoard文章 StoryBoard 和 Xib 不利于多人协作,git合并代码容易冲突,且难以处理...说到底,臃肿Storyboard和臃肿ViewController一样,都是难以维护且容易git冲突。唯一解决方案就是有节制使用工具。...ChildViewController 可以通过 self.parent(Swift)|| self.parentViewController(OC)来拿到主ViewController实例。...主ViewController可以通过 self.chilren(Swift) || self.childViewControllers(OC)来拿到ChildViewController实例,它是一个数组...StoryBoard 或 Xib上使用约束技巧,可以参考文章《纯Swift项目-Xib | StoryBoard 设备适配技巧[2]》及 《纯Swift项目-Xib | StoryBoard 约束使用技巧

    2.1K20
    领券