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

如何在没有情节提要文件的情况下将另一个viewController推送到屏幕上?我已经尝试了下面的代码,但是什么也没有发生

在没有情节提要(Storyboard)文件的情况下,你可以使用纯代码的方式来推送(push)一个UIViewController到屏幕上。这通常涉及到使用导航控制器(UINavigationController)来管理视图的堆栈。以下是一些基础概念和相关步骤:

基础概念

  • UIViewController:这是iOS应用中视图控制器的基类,负责管理用户界面和响应用户交互。
  • UINavigationController:这是一个容器视图控制器,用于管理一系列其他视图控制器,并提供导航功能,如后退按钮和标题栏。

相关优势

  • 灵活性:纯代码方式提供了更高的灵活性,允许你在运行时动态创建和管理视图控制器。
  • 性能:在某些情况下,纯代码可能比使用情节提要文件有更好的性能。
  • 可维护性:对于简单的应用或组件,纯代码可能更容易理解和维护。

类型与应用场景

  • 动态视图控制器创建:适用于需要在运行时根据条件创建不同视图控制器的场景。
  • 无故事板项目:对于完全不使用故事板的项目,纯代码是唯一的选择。

示例代码

假设你有一个名为SecondViewController的视图控制器类,你想将它推送到屏幕上。以下是如何实现的步骤:

  1. 创建SecondViewController类
代码语言:txt
复制
import UIKit

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .blue
        title = "Second View Controller"
    }
}
  1. 在当前视图控制器中推送SecondViewController
代码语言:txt
复制
import UIKit

class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        let button = UIButton(type: .system)
        button.setTitle("Go to Second VC", for: .normal)
        button.addTarget(self, action: #selector(pushSecondViewController), for: .touchUpInside)
        view.addSubview(button)
        button.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            button.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])
    }

    @objc func pushSecondViewController() {
        let secondViewController = SecondViewController()
        navigationController?.pushViewController(secondViewController, animated: true)
    }
}

常见问题及解决方法

如果你尝试了上述代码但什么也没有发生,可能是以下几个原因:

  1. 导航控制器未设置:确保你的FirstViewController已经被嵌入到一个UINavigationController中。你可以在应用的入口点(如AppDelegate)中设置:
代码语言:txt
复制
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    let firstViewController = FirstViewController()
    window?.rootViewController = UINavigationController(rootViewController: firstViewController)
    window?.makeKeyAndVisible()
    return true
}
  1. 按钮事件未正确绑定:检查按钮的事件是否正确绑定到pushSecondViewController方法。
  2. 视图控制器未正确初始化:确保SecondViewController的实例被正确创建并且没有其他初始化错误。

通过这些步骤,你应该能够在没有情节提要文件的情况下成功推送视图控制器到屏幕上。

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

相关·内容

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

当我们在它时,向下滚动并删除Mark下的注释掉的代码,这是该协议下的一个方法的给定示例。Mark帮助我们分离文件中的代码段。...但是在屏幕上看到它不是很好吗?为此,我们将添加一个函数来创建一个节点作为我们的视觉辅助。...您现在正在学习如何在代码中应用它。 飞机位置 所以,就像我们为手表所做的步骤一样,我们需要定位它。将平面节点放在检测到的曲面的中心。...但是,Swift将角度存储在弧度中。如何将度数转换为弧度?我们应该回顾一下我们的高中数学。为了找到弧度的等价物,这里是等式。 根据图表,你会得到90度是pi的一半。...例如,您可以将物理应用于水平表面以使虚拟对象掉落,在其上驾驶汽车或在场景上为角色设置动画。 与此同时,我希望您能够在场景编辑器中学到的概念代码中受到教育。

2.9K30

RSS消亡史:没有比这更令人扼腕叹息的了!

当然,我尝试了 Feedly 和 Inoreader 以及许多其他的替代品,甚至在我的服务器上安装了微型 RSS,但都没有什么感觉。...我当时对极简主义很感兴趣,那个页面只显示了简短的新闻标题和漂亮清晰的排版。甚至为了添加另一个博客,我不得不编辑 HTML 源代码本身。...个人 CORS 代理和用于推送新闻的 HTML 文件的组合工作得很好,但是后来我慢慢地也放弃了这些努力。...展望一下 由于每个人都在谈论进步的Web应用程序,我决定将项目改成 PWA 模式。我并不强硬,有 Lighthouse 和大量的文件。现在,即使在断网状态下,我也可以阅读最后一条缓存的新闻。...此外,你可以在桌面上创建订阅源,将URL转换成二维码,在移动设备上打开它,这样无需任何后端技术,就可以轻松同步数据。 另一个想要处理的问题是,如何减少标题提要中的帖子数量。

1.3K10
  • ARKit 的配置-在您的AR项目的幕后

    在本节中,我们将看看如何在后面配置提供的ARKit模板。我们将发现什么是世界跟踪和AR会话。同样,我们将学习如何将一些调试选项应用于场景中的指导。...AR场景视图 ARKit模板已经放入对象库中可用的ARSCNView视图类中。此视图反映了相机看到的内容并将其显示在屏幕上。...没有它,我们将无法跟踪我们的设备在世界上的位置,将我们的虚拟对象放在桌子上,甚至放在房间里。...你能告诉我另一个用于ARKit的流行技术的例子吗?让我给你一个提示:Animoji。这是正确的,它是面部跟踪,如果你第一次购买iPhoneX,你可能会有很多乐趣。...相机使用权限 用户反馈 作为开发人员,我们一直需要获得反馈,以帮助我们弄清楚发生了什么和出了什么问题。 统计 在viewDidLoad中,这行代码允许在屏幕上显示统计信息。运行该应用程序以检查它。

    2.5K20

    Xcode:处理故事板的更好方式 享受Interface Builder的提示和技巧

    1.使用Xcode 7中引入的故事板引用 2.在代码中连接故事板。 你可以阅读更多关于第一种方式在这里。 我将介绍第二种方式,因为它仍然常用于复杂的项目。...当您想要按下按钮导航到下一个viewController时,只需为此按钮添加一个IBAction,并在代码中初始化此viewController:当您采用建议#3时,它实际上是一行代码。...有时导航流程应该将用户带回到前一个屏幕。 这是另一个常见的错误:使用新的segue导航回以前的viewController。...在这种情况下,从按钮拖动到“退出”出口是期望代码已经在您的项目中。 通常,当您为按钮创建动作插座时,它会将代码放在拥有该按钮的同一个类中。...对于Unwind Segues,您需要在目标视图控制器中编写代码。 prepareForUnwind方法的所有缺点prepareForSegue方法(见前面的建议) 什么是更简单的方法?

    1.4K30

    UIKit Dynamics:开始入门 —《Graphics & Animation系列一》

    这些属性是隐式解包的optionals(如类型名称后面的!所示)。 这些属性必须是可选的,因为我们没有在init方法中初始化它们。...通过这种方式,可以选择哪些项目受到行为的影响,在这种情况下哪些项目会受到重力的影响。 大多数行为都有一些配置属性;例如,重力行为可以改变它的角度和大小。...设置边界 为了保持方块在屏幕的边界内,需要定义一个边界。 添加另一个属性在 ViewController.swift var collision: UICollisionBehavior!...碰撞通知 到目前为止,已经添加了一些视图和行为,然后让动态接管。 在下一步中,将了解如何在物品碰撞时接收通知。...到目前为止,UIKit Dynamics已经根据物品的界限自动设置物品的物理属性(如质量和弹性)。 接下来,将看到如何使用UIDynamicItemBehavior类自己控制这些物理属性。

    1.9K30

    如何解决Xcode中的SIGABRT错误

    这是由iOS(操作系统)发送到正在运行的应用的信号,由于运行时错误,该信号将立即退出该应用。...这并不意味着导致错误的代码行在stacktrace中的任何位置。有时是这样,但是在其他情况下,stacktrace只会导致代码阻塞在您自己代码中其他位置设置的值上。 不要盲目地盯着SIGABRT错误。...有一个合理的,逻辑上的错误原因。这可能是您自己的代码中的错误,并且这没有什么错。应用不是魔术,没有人能吸引您,并且错误永远不会出乎意料。不要让自己感到沮丧,例如“昨天运行良好!”...在这里,检查典型索引超出范围错误的堆栈跟踪。在下面的屏幕截图中,我们故意99从仅包含4个项目的数组中获取索引,从而导致了该错误。当应用崩溃时,bt可以告诉我们哪一行代码导致了错误。...在这种情况下,Xcode已经通过突出显示编辑器中的错误为我们提供了帮助。在某些情况下,您将不会遇到这种运气,因此使用该bt命令可能会有所帮助。 最后一件事:您可以在运行时使用print命令检查值。

    6.1K20

    花36美元买了个摄像头,然后它在我不知情的情况下录制了682GB视频

    但是,不知道有没有人遇到过这种情况,在偶然间浏览硬盘时,会发现电脑上存在几百个千兆字节的冗长视频文件,最关键的是,当你打开这些视频文件,你会发现这是在你不知情的情况下录制的。...换句话说,这几十甚至上百个小时的录像,在你不知情的情况下记录了你生活的一切,细思极恐。 这样的事情就发生在了一位名叫Tom McKay的博主身上。...同样的,如果McKay能够弄清楚如何在没有第三方软件的情况下让摄像头这样做,这也不会成为一个问题。...你可能会说,或许是McKay不小心按了录像键或什么的,他并没有意识到软件已经开始运行了。 但从6月9日到现在,在文件夹里又出现了大约240GB的录像,这还不包括5月份309GB的录像。...一种新的远程访问木马(RAT)正在对在线赌博下手,该木马除了具有可预测的功能(如文件评估和渗漏)外,还采用了使用直播来监视受害者屏幕的方法。

    45020

    唯一可行的 iOS 架构

    MVVM 添加了一个新层 ViewModel 来将代码与 Controller 分开。但是实际上,它并不能解决所有问题。ViewModel 应该真正包含什么?...它开始将 ViewController 视为 View,所有逻辑都交给新类 Presenter。但是它并没有流行起来,因为它看起来真的很奇怪。...它为我们提供了许多功能,如果我们开始使用它们,这些功能将带来巨大的好处。 我们需要MVC替代品吗? 好吧,答案很明显:我们不需要。您已经了解了什么是真正的 MVC,以及如何在 iOS 中使用它。...如果没有给我们带来任何收益,我们为什么应该转移所有用户操作,将所有视图状态从 Controller 更改为 Presenter?它只会给我们带来额外的代码和复杂性。...好了,在这种情况下,我们将根据 MVC 原理将表示和业务逻辑混合在一个不好的类中。很难理解为什么有此代码。我们看不到该代码是针对哪个具体视图编写的。最后,很难在不同的屏幕上重用此模型。

    1.3K20

    UIViewController的生命周期及iOS程序执行顺序

    除非你没有使用xib文件创建视图 4、viewDidLoad载入完成,可以进行自定义数据以及动态创建其他控件 5、viewWillAppear视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了 6、...viewDidAppear视图已在屏幕上渲染完成 当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反 1、viewWillDisappear视图将被从屏幕上移除之前执行 2、viewDidDisappear...视图已经被从屏幕上移除,用户看不到这个视图了 3、dealloc视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放 关于viewDidUnload:在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话...2) - (void)viewDidUnload; 在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图...他们都可以用来在视图载入的时候,初始化一些内容。 但是他们有什么区别呢? viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用。

    1.9K110

    View编程指南

    这种动态修改子view的功能使您的view能够适应不断变化的条件,如界面旋转和动画。 您可以将view视为用于构建用户界面的构建块。...由于对Interface Builder和nib文件的支持已经整合到iOS中,所以将nib文件合并到您的应用程序的设计中需要一点努力。...但是,在需要更多地控制view的渲染或动画行为的情况下,您可以通过其layer执行操作。 要理解View和图层之间的关系,有助于看一个例子。...当在特定view内发生触摸时,系统将带有触摸信息的事件对象直接发送到该view进行处理。但是,如果view不处理特定的触摸事件,它可以将事件对象传递给其superview。...任何更新的view都会与应用程序的其余可见内容合成,并发送到图形硬件进行显示。 图形硬件将渲染的内容传输到屏幕上。 注意:上述更新模型主要适用于使用标准系统view和绘图技术的应用程序。

    2.3K20

    如何使用 Swift 开发 iOS PDF 查看器或编辑器

    目前,Mac 的 M 系列芯片不支持在 Apple Silicon 模拟器上运行。对于早期版本的 Xcode(如 Xcode 13),Bitcode 选项可能被设置成默认打开,这需要关闭它才能运行。...选择并输入您要发布的应用程序的Apple开发者帐户。输入您的组织标识符的名称 (com.example.pdfviewer)。为界面选择情节提要。选择编程语言“Swift”。单击“下一步”按钮。...将您的桥接头文件的路径添加到 Objective-C Bridging Header 旁边,路径从项目根文件夹开始。...按照下面的代码,您需要将LICENSE_KEY和LICENSE_SECRET替换为您获得的许可证。...如果创建的大小 CPDFView 为零,请按照下面的代码调整View的大小。

    18400

    UI篇-VC的生命周期以及UIView的layoutSubviews和drawRect方法

    前言 看似常用的UIView,其实有很多不经常用到的方法和应该注意的机制,我是一个喜欢打破砂锅问到底的人,可是很多问题在网上搜索不到答案,大部分的博客都是转载相同的东西,所以我自己就新建 Dome,实际测试了一些数据...push的时候首先会加载下一个界面然后才会调用界面的消失方法 initWithCoder:(NSCoder *)aDecoder:ViewController2 (如果用xib创建的情况下) loadView...但是在VC中,当前UIView的是在 viewDidLoad 执行后才初始化好的,所以我们会见到这样一个Bug,在VC初始化语句后面调用 一个 VC的绘制UI的方法,你会发现根本没有效果,这就是因为,VC...layoutSubviews在以下情况下会被调用: 1、init初始化不会触发layoutSubviews。 2、addSubview会触发layoutSubviews。...drawRect在以下情况下会被调用: 1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。

    1.9K30

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

    真棒,我们刚刚完成了课程,但我们还没有看到它。 类变量 为此,请转到ViewController.swift文件。我们将首先在sceneView声明之后为焦点方块声明一个类变量。...然后,通过将其添加到场景的根节点将其显示在屏幕上。最后,将其保存在稍后要使用的类变量下。运行该应用程序以查看我们的焦点方块。...屏幕中心 让我们回到ViewController.swift并为屏幕的中心声明另一个变量。我们将它用作焦点方块的参考点,以便在我们移动相机时跟随它们。屏幕中心始终存在,因此它不是可选的。...打开和关闭 我们如何为焦点方块添加漂亮的触感?您可能已经意识到我们有两个用于焦点方块的资产图像,一个是开放的,一个是关闭的。这应该会给你一个提示,我们都会在不同情况下使用它们。...默认情况下,我们将其设置为true,因为它只在我们检测到曲面时才会显示在屏幕上。如果isClosed为true,请使用图像FocusSquare / close。

    2.4K30

    dotnet 配合 Gitlab 做自动推 Tag 时打包 NuGet 包

    此时遇到的问题是,如何在 Gitlab 上执行打包,打包的时候如何指定 NuGet 包的版本号。...也就是本地打一个 Tag 号,推送到 Gitlab 上,就会出发 Gitlab 的自动构建,自动构建里面将会获取 Tag 版本号,然后打出 NuGet 包推送到服务器 在阅读本文之前,期望大家了解什么是...如我推送到 1.0.0 的 Tag 那么这个 CI_COMMIT_TAG 的值就是 1.0.0 可以通过这个原理拿到推送的内容 在编译里面的设置,可以在 csproj 或 targets 等文件里面通过...因为是内部用的模版我也没有打算开源 通过三个步骤能使用 dotnetCampus.TagToVersion 这个工具,这个工具能解决在本地打出 NuGet 包的版本号问题,能解决带 v 的特殊的 Tag...然后我告诉你,每次新建文件的时候都需要向 NafojaneKakoweebi 添加一个 o 不然新建的文件没有作用。

    1.7K10

    基础渲染系列(七)——阴影

    这是否意味着我无法将MSAA与定向阴影结合使用? 可以,但是你会遇到上述问题。在某些情况下,它可能不会引起注意。例如,当所有表面颜色大致相同时,失真将很微小。当然你仍然会获得锯齿状的阴影边缘。...启用阴影后,这些宏将执行与刚才相同的工作。没有阴影时,它们什么也不做。 SHADOW_COORDS在需要时定义阴影坐标的插值器。我使用_ShadowCoord名称,这是编译器先前报错的名称。 ?...(2个聚光灯的阴影) 查看帧调试器时,你会发现Unity对聚光灯阴影的工作较少。没有单独的深度pass,也没有屏幕空间阴影传递。仅渲染阴影贴图。 ?...4.1 采样阴影贴图 由于聚光灯不使用屏幕空间阴影,因此采样代码必须不同。但是Unity的宏对我们隐藏了这种差异。 聚光灯下的宏长什么样?..._ShadowOffsets包含平均用于创建柔和阴影的四个样本的偏移量。在下面的代码中,我仅显示了这四个示例中的第一个。 ? ? 5 点光源阴影 现在尝试点光源。

    4.2K30

    【IOS开发进阶系列】动画专题

    如果你有游戏编程的经验,那么你一定对图片拼合的概念很熟悉,图片能够在屏幕上独立地变更位置。抛开游戏编程不谈,这个技术常用来指代载入拼合的图片,跟移动图片一点关系也没有。        ...它作用于原图的像素上并根据需要生成新的像素显示在屏幕上。         事实上,重绘图片大小也没有一个统一的通用算法。这取决于需要拉伸的内容,放大或是缩小的需求等这些因素。...我们可以在编译的scheme将路径参数硬编码然后就可以在Xcode中运行了,但是以后作用在另一个图片上就不方便了。...编写GLSL代码和设置EAGLayer没有什么关系,所以我们将用GLKBaseEffect类将着色逻辑抽象出来。其他的事情,我们还是会有以往的方式。         ...虽然苹果的文档中没有指明,但是通过代码测试可以发现,默认情况下所有的CALayer图层的时间线都是一致的,他们的beginTime都是0,绝对时间转换到当前Layer中的时间大小就是绝对时间的大小。

    56910

    兼容 - 纯代码完美适配 iPhoneX

    ,但是自己的页面书写代码就要注意了,以前可以触底的,现在要保留34pt 距离了。...没有适配 iPhoneX的触底页面 旧工程如何在iphoneX全屏显示 只需要在LaunchImage中添加一个尺寸为1125 × 2436的启动图,并且工程使用LaunchImage加载启动图的,而不是使用...TabBar上移 系统原生的Tabbar在push的时候会上移 在UINavigationController的基类重写pushViewController代理方法,在Push的时候修正一下TabBar...关于状态栏另外两个需要注意的地方: 不要在iPhone X下隐藏状态栏,一个原因是显示内容足够高了,另一个是这样内容会被刘海切割。 ?...现在通话或者其它状态下,状态栏高度不会变化了,程序不需要去做兼容。 横屏 在横屏状态下,不能因为刘海的原因将内容向左或者向右便宜,要保证内容的中心对称: ?

    4.5K20

    【MySQL】IO thread和SQL thread的双Yes假象的问题

    Slave_SQL_Running: Yes 说明: 网络恢复之后,binlog dump线程已不存在; 主库有新的写入,从库无法同步,但是I/O线程和SQL线程都是YES,SBM也没有延迟...那么 MySQL 具体是怎么“推”的列,实际上备库在向主库申请数据变更记录的时候,需要指定从主库Binlog 的哪个文件 ( MASTER_LOG_FILE ) 的具体多少个字节偏移位置 ( MASTER_LOG_POS...4 原因解析 从上面的分析,我们可以大致猜到为什么 show slave status 显示一切正常,但是实际上主库的变更都无法同步到备库上来: 出现问题的时候, Binlog dump 程序被我们 kill...5 问题避免 基于上面的分析,我们知道 MySQL 在这种情况下确实无法避免,那么我们可以有哪些办法可以避开: (1) 被动处理:修改延迟的监控方法,发现问题及时处理。...也就是说,如果主库一个小时都没有任何数据变更发送过来,备库才会尝试重连主库。这就是为什么在我们模拟的场景下,一个小时后,备库才会重连主库,继续同步数据变更的原因。

    1.1K30
    领券