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

如果之前的视图控制器不是根视图控制器,也没有导航控制器,我如何从SKScene访问它?

如果之前的视图控制器不是根视图控制器,也没有导航控制器,你可以通过以下步骤从SKScene访问它:

  1. 首先,你需要获取当前的视图控制器。可以通过以下代码获取当前的视图控制器:
代码语言:swift
复制
guard let window = UIApplication.shared.windows.first,
      let rootViewController = window.rootViewController else {
    return
}

var currentViewController = rootViewController
while let presentedViewController = currentViewController.presentedViewController {
    currentViewController = presentedViewController
}
  1. 接下来,你需要找到之前的视图控制器。可以通过以下代码找到之前的视图控制器:
代码语言:swift
复制
if let previousViewController = currentViewController.presentingViewController {
    // 在这里可以访问到之前的视图控制器
}
  1. 现在,你可以在SKScene中访问之前的视图控制器了。可以通过以下代码将之前的视图控制器传递给SKScene:
代码语言:swift
复制
if let scene = self.scene as? YourSKSceneClass {
    scene.previousViewController = previousViewController
}

在上述代码中,YourSKSceneClass是你的SKScene的类名,previousViewController是你在SKScene中定义的一个属性,用于保存之前的视图控制器。

这样,你就可以在SKScene中访问之前的视图控制器了。请注意,这种方法仅适用于之前的视图控制器不是根视图控制器且没有导航控制器的情况。如果有导航控制器,你可以使用导航控制器的相关方法来获取之前的视图控制器。

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

相关·内容

Cocoa编程中视图控制器视图类详解

还为标准系统行为进行响应。语法上 说,UIViewController是视图控制器父类。视图控制器类是没有可视化表示抽象类,只有管理视图才提供可视画布。记住:1....每一个导航控制器都拥有一个视图控制器RootViewController,它是“导航弹出栈”基础,是。5....可使用popToRootViewControllerAnimated:BOOL直接弹出到视图控制器。 6. 设置导航按钮并不是去设置导航栏本身。...导航栏可以通过直接访问navigationBar属性,改变栏风格或者颜色: C代码   self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent...主要方法 • –loadView:不要主动调用该方法,当访问控制器view时候,就会调用该方法。如果要自己创建view,则需要重写该方法。

5.1K50

iOS基础问答面试题连载(二)-附答案

控制器调用loadView方法创建控制器view.默认做法是: 先去判断当前控制器不是StoryBoard当中加载,如果是,那么它就会StoryBoard当中加载控制器View....如果不是StoryBoard当中加载, 那么它还会判断是不是Xib当中创建控制器.如果是,那么它就会xib加载控制器View....如果也没有带有下划线成员属性,就看有没有跟相同名称成员属性,如果有就会给该属性赋值....当调用pop方法时, 会把要pop控制器栈里移除,把之前导航控制器中栈顶控制器View给移除,把当前栈顶控制器添加上去. 16.如何设置导航内容?...导航内容由导航控制器栈顶控制器NavigationItem决定. 17.导航控制器pop操作有哪些? 返回上一级 返回到控制器 返回到指定控制器. 18.文本框如何拦截用户输入?

1.4K90
  • iOS屏幕旋转及其基本适配方法

    如果我们要具体控制单个界面UIViewController旋转就必须先看一下视图控制器配置情况了。...当然,在一般情况下,我们项目都是用UITabbarViewController作为Window视图控制器,然后管理着若干个导航控制器UINavigationBarController,再由导航控制器去管理普通视图控制器...但如果存在上层视图控制器,而我们只在这个视图控制器中实现方法,会发现这个方法是不走,因为这个方法被上层视图控制器拦截了。理解这个原理后,我们有两种方法实现自动可控旋转设置。...UINavigationController如下: //是否自动旋转 //返回导航控制器顶层视图控制器自动旋转属性,因为导航控制器是以栈原因叠加VC //topViewController是其最顶层视图控制器...方法2: 另辟蹊径,使用模态视图 使用模态视图可以不受这种视图控制器优先级限制。这个也很容易理解,模态弹出视图控制器是隔离出来,不受视图控制影响。

    9.3K60

    iOS开发UINavigation系列四——导航控制器UINavigationController

    iOS开发UINavigation系列四——导航控制器UINavigationController 一、引言         在前面的博客中,么你介绍了UINavigationBar,UINavigationItem... toolbarClass:(nullable Class)toolbarClass; //使用系统默认导航栏和工具栏,通过一个视图创建导航控制器 - (instancetype)initWithRootViewController...:(UIViewController *)rootViewController; 通过以下方法对视图控制器进行管理操作: //设置管理视图控制器 - (void)setViewControllers:...UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;  //直接pop到视图控制器...; //push时候隐藏底部栏,如push后隐藏tabbar @property(nonatomic) BOOL hidesBottomBarWhenPushed; //管理导航控制器 @property

    1.8K20

    UINavigationController

    :(BOOL)animated; //回到控制器(栈底控制器) - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 如何修改导航内容...导航内容由栈顶控制器navigationItem属性决定 UINavigationItem有以下属性影响着导航内容 //左上角返回按钮 @property(nonatomic,retain...retain) UIBarButtonItem *rightBarButtonItem; 清空导航条背景图片 // 清空导航条背景图片,系统判断当前是否为Nil,如果为nil,系统还是会自动生成一张背景图片...可以分为2大类型 自动型:点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转 按住Control键,直接控件拖线到目标控制器 如果点击某个控件后,不需要做任何判断,一定要跳转到下一个界面...Modal形式展示出来 Modal默认效果:新控制器屏幕最底部往上钻,直到盖住之前控制器为止 //以Modal形式展示控制器 - (void)presentViewController

    1.4K60

    iOSMVC框架之控制层构建(上)

    前面的两篇文章里面分别对MVC框架中M层定义和构建方法进行了深入介绍和探讨。这篇文章则是想深入介绍一下我们应该如何去构建控制层。控制层是联系视图层和模型层纽带。...为了处理控制器之间交互或者调用,系统提供了一个导航管理类。导航栈负责各功能控制器进入和退出,同时管理着所有的控制器。...viewDidDisappear 视图已经窗口中删除时调用。 dealloc 控制器被销毁前被调用。 如何构建您控制层 如何构建一个控制层是一个非常广泛命题,需要具体业务具体分析。...结果并不是这样,因为在系统内部如果某个视图控制器视图的话他可能会具有一些不同特性以及不同处理逻辑,因此其实在UIView内部私有属性中是有一个视图所归属视图控制器属性,这个属性就是...)这样当控制器视图被销毁时,视图里面的子视图也应该被销毁,而如果你用strong来定义子视图时就有可能导致子视图生命周期要长于视图

    1.6K20

    iOS6中横屏处理方法 原

    注意: 如果你们项目中RootViewController是导航,你会发现,你在Push出来视图中添加刚才代码并没有起作用,原因是导航,并没有进行设置,我们创建一个文件,继承于NavigationController...在里面重写刚才方法,这么做后,屏幕确实横了过来,并且这个导航push所有子界面都将横屏,这也不是我们想要效果。...];; } 我们还需要做一些处理,经过测试,导航必须在pop后才会重新调用这些函数,所以我方法是这样做:弹出一个中间控制器后再POP回来 @implementation ViewController2...同理,如果视图控制器是tabBar,则我们需要在tabBar中做操作。...如果我们大多是的视图控制器都是一个方向,只有偶尔几个会不同,这时候,我们其实可以采取presentationController方式,然后直接在弹出控制器中写那两个方法即可。

    1.1K60

    iOS 9人机界面指南(四):UI元素(上) - 腾讯ISUX

    你可以用导航栏在不同视图间提供导航,或在上面放置管理当前视图内容相关控件。如果你需要提供导航栏难以承载大量控件同时又不是非要提供导航不可,你可以考虑使用工具栏(Toolbar)。...用容器视图控制器来呈现内容,使用户可以通过控制器来以自定义方式进行导航。 先问问你自己是不是必须用到容器视图控制器。用户会更习惯诸如对分视图、或者是标签栏视图这类他们所熟知东西。...如果你采用了故事板(storyboard)设计方法来设计你视图控制器,你往往自然而然地会为自定义一些动画。...如果你对浮出层改动过大,用户就不能凭借之前经验来理解如何用你app里浮出层了。 当浮出层可见时候,想要改变尺寸的话请务必谨慎。...在iOS 7及之前版本里,对分视图控制器仅适用于iPad. 默认情况下,对分视图控制器通过当前尺寸来管理其子视图

    10.1K51

    【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中基本文本和button以及各种跳跃

    大家好,又见面了,是全栈君 (1)navigationBar导航栏可以被看作是self.navigationController一个属性导航控制器,它可以由点直接表示self.navigationController.navigationBar...我们当然也能够利用自己创建导航条button来覆盖原来导航控制器产生默认button,如“<Back”。 相同。...须要创建两个视图控制器(ViewController视图控制器,SecondViewController子视图控制器),然后放在导航控制器栈中。...,所谓跳转,事实上就是往导航控制器栈中PUSH或者POP一个视图控制器,这样在最上面的视图控制器就变了,这样视图也跟着变了,由于仅仅显示在栈顶得那个视图控制器视图 //所以(1)控制所谓跳转...事实上是导航控制器在控制,在里面的元素都能够通过navigationController属性获取到它们所在导航控制器 //所以(2)获取到导航控制器之后,使用Push那个方法,往栈里面放一个视图控制器

    2.3K10

    UINavigationController 导航控制器概念属性方法

    时候隐藏底部栏,如push后隐藏tabbar @property(nonatomic) BOOL hidesBottomBarWhenPushed; (3)获取管理导航控制器 @property(...toolbarClass:(nullable Class)toolbarClass; (2)使用系统默认导航栏和工具栏,创建一个导航控制器同时设置一个视图控制器 - (instancetype)initWithRootViewController...*> *)viewControllers animated:(BOOL)animated; 3、管理视图控制器操作 (1)压入新视图控制器 - (void)pushViewController:(...= YES; [super pushViewController:viewController animated:animated]; } (2)弹出一个视图控制器 返回是popcontroller...UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; (4)直接pop到视图控制器

    2.1K60

    iOS多控制器之UINavigationController&UITableBarController1. 多控制器2. UINavigationController3. UITableBarCont

    时, 可以通过initWithRootViewController:方法传入一个控制器作为控制器 这个控制器永远处于栈底(如果栈中只有一个对象,那么控制器也处于栈顶) 设置UIWindowrootViewController...1,initWithRootViewController:创建导航控制器时,直接指定一个控制器。...]; navigationController 和navigationItem都是通过"控制器"对象调用 navigationBar 是通过"导航控制器"对象调用 如果想改变导航条整体样式 那么应该找...navigationbBar 如果想改变导航条上内容找 navigationItem 3....:c1]; tb.viewControllers=@[c1,c2,c3,c4]; 注意:展示顺序和添加顺序一致,和导航控制器中不同,展现在眼前导航控制器视图控制器也就是第一个添加到导航控制器视图

    1.3K40

    在Swift中使用工厂进行依赖注入

    然而,我们列表视图很可能不是只有一层,这在某种程度上需要我们实现导航到另一个视图控制器。 假设我们想让用户在点击消息列表中某个单元格时,能够导航到一个新视图。...这样我们就可以很容易地任何地方访问,并通过简单地使用它共享实例将其注入MessageViewController中: let viewController = MessageViewController...工厂模式来救援 如果我们能跳过上述所有的步骤,让MessageListViewController完全不知道MessageSender,以及其他任何后续视图控制器可能需要依赖关系,那不是更好吗?...最后,我们将使我们新依赖容器遵守我们工厂协议,这将使我们能够把作为工厂注入到我们各种视图控制器和其他对象。...由于我们已经将所有的工厂定义为协议,我们可以通过实现任何给定工厂协议特定测试版本,在测试中轻松地模拟它们。将在未来博文中写更多关于模拟和如何在测试中充分利用依赖注入内容。 你怎么看?

    83120

    iOSMVC框架之控制层构建(下)

    在这里面想强调一点是虽然控制器中拥有了一个view视图属性,但是控制器生命周期一般要比视图生命周期要长,而且有可能会出现一个功能在不同场景下视图呈现完全不一样,或者有可能会通过重新构建视图来实现一些换肤功能场景...如果你想复用默认视图作为自己视图那么你需要在构建你其他子视图之前调用基类loadView方法,而如果你想要完全构建自己视图以及子视图体系那么你就不必要调用基类loadView方法。...如何在loadView中更加优雅以及合理构造界面布局代码,后面将会给出一个具体解决方案。 -(void)loadView { /* 自定义视图构建,不需要调用基类方法。...也许上面的方式说不服你,你还是通过代码来构建布局那一派。没有关系,本文探讨如何解决控制器代码膨胀问题,而不是掀起派系之争。那么如果就是要通过代码方式来完成界面布局呢?...loadView]; //如果你想完全自定义视图就可以和上面曾经列出代码一样不调用父类方法。

    4.4K30

    iOS导航栏使用总结

    导航视图层级图 图中可以看出,导航底部分割线是一个UIImageView对象,而且高度只有0.5,所以我们可以据此获取到导航底部分割线对象,在一个视图控制器中实现此需求,代码如下: #import...,用于优化滑动类视图(继承于UIScrollView视图)在视图控制里显示: iOS系统导航栏UINavigationBar与标签栏UITabBar默认都是半透明模糊效果,在这种情况下系统会对视图控制器...导航栏透明情况下,滑动视图自动偏移,普通视图被遮挡 其实,这种系统优化也是可以控制关闭,关闭优化之后,滑动视图就会和普通视图一样,如果还设置其布局原点是(0,0),其内容就会被导航栏所覆盖,关键代码如下...,默认值是UIRectEdgeAll,即:当前视图控制器里各种UI控件会忽略导航栏和标签存在,布局时若设置其原点设置为(0,0),视图会延伸显示到导航下面被覆盖。...,那么视图控制器控件就会默认(0,64)开始布局了,设置导航栏不透明方法如下: self.navigationController.navigationBar.translucent= NO;

    3.2K20

    ViewController及View生命周期1. 起因2. Controller生命周期3. View生命周期4. 内存警告

    Controller生命周期 系统提供了控制器显示到消失四个方法。 千万不要看到方法名中间出现了view就以为这是视图方法。这些都是控制器生命周期。...iOS7新增加了导航控制器侧滑手势,当触发侧滑返回时,会调用系统viewWillDisappear:方法,取消侧滑返回时又会调用viewWillAppear:方法。...5_0); 在四个方法中: isMovingFromParentViewController 会在viewWillDisappear & viewDidDisappear 方法内部调用这个方法判断视图控制器视图隐藏是否因为视图控制器容器视图控制器移除...,与上面被其它视图控制器显示对应,如信息录入完成,返回之前视图控制器)。...在执行时候会首先判断有没有指定storyboard或者Xib,如果指定,就会加载它们描述控制器View,如果没有指定,创建一个空View。

    1.4K30

    Swift-MVVM 简单演练(一)

    Push 出控制器后,底部 TabBar 隐藏/显示问题 在导航控制器基类里面重写一下push方法 判断如果不是控制器,那么push时候就隐藏BottomBar 注意调用super.pushViewController...(只在第二级页面这样显示) 在重写pushViewController方法里面去判断,如果控制器个数childViewControllers.count == 1时候,就设置返回按钮文字为控制器...总结 使用代理传递消息是为了在控制器视图之间解耦,让视图能够被多个控制器复用,如TableView 但是,如果视图仅仅是为了封装代码,而控制器中剥离出来,并且能够确认该视图不会被其它控制器引用,...则可以直接通过addTarget方式为该视图按钮添加监听方法 这样做代价是耦合度高,控制器视图绑定在一起,但是省略部分冗余代码 ---- 调整未登录时导航按钮 如果单纯在setupVistorView...和之前把网络请求url和para都放在controller相比,是不是控制器轻松了一点呢!

    10.3K51

    用纯 JavaScript 撸一个 MVC 框架

    需要用户输入,例如单击或键入,并处理用户交互回调。 模型永远不会触及视图视图永远不会触及模型。控制器用来连接它们。 想提一下,为一个简单 todo 程序做 MVC 实际上是一大堆样板。...接着在构造函数中,将为视图设置需要所有东西: 应用程序元素 - #root 标题 h1 一个表单,输入框和提交按钮,用于添加待办事项 - form, input, button 待办事项清单...我们只是没有办法连接它们,因为现在还没有事件监视用户进行输入,也没有处理这种事件输出 handle。 控制台仍然作为临时控制器存在,你可以通过添加和删除待办事项。 ?...这允许我们可以用控制器 this 上下文视图中调用它们。如果不用箭头函数,我们将不得不手动去绑定它们,如 controller.handleAddTodo.bind(this)。...,因为 temporaryEditValue 变量在技术上应该在视图中而不是控制器中,因为它是与视图相关状态。

    3.3K41

    SpringMVC简介与工程配置

    而SpringMVC是一个典型教科书式MVC构架,不像Struts等都是变种或者不是完全基于MVC系统框架,对于初学者或者想了解MVC的人来说觉得 SpringMVC 是最好。...所以使得SpringMVC成为现在最主流MVC框架。 简单介绍完SpringMVC后,我们来看看请求是如何客户端发起,经过SpringMVC中组件,最终再返回到客户端。...一旦选择了合适控制器,DispatcherServlet会将请求发送给选中控制器。请求到了控制器后,会卸下用户提交数据。而控制器会把这些数据交给服务对象进行处理,如果控制器设计得良好的话。...控制器所做最后一件事就是将模型数据打包,并且标示出用于渲染输出视图名。接下来会将请求连同模型和视图名称发送回DispatcherServlet。...这样控制器不会与特定视图相耦合,因为传递给DispatcherServlet视图名并不直接表示某个特定JSP。实际上,甚至不能确定视图就是JSP。

    56610
    领券