删除iOS项目中的storyboard

删除项目中的storyboard, (变成一个纯代码的iOS UIKit项目), 需要几步?

  • 找到storyboard, 删掉它.
  • 直接用ViewController.

删除storyboard

  • 首先, 你得有(新建)一个storyboard项目.

  • 删除storyboard. 选"Move to Trash".

  • 删除plist中的storyboard name.

  • 删除deploy target中的Main Interface, 本来是”main”, 把它变为空.



    (截图换了一个项目名, 不要在意这些细节.)

用上自己的ViewController

在ViewController里写上自己的完美View.

比如:

import UIKit

class ViewController: UIViewController {

    override func loadView() {
view = UIView()
view.backgroundColor = .systemBlue
} override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}

设置新的rootViewController.

  • SceneDelegate中设置rootViewController. (iOS 13)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let windowScene = (scene as? UIWindowScene) else { return }
let window = UIWindow(windowScene: windowScene)
window.rootViewController = ViewController()
self.window = window
window.makeKeyAndVisible()
}
...
  • tvOS没有SceneDelegate (或者你想要兼容iOS 13以前的旧版本):
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow? func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = ViewController()
window?.makeKeyAndVisible() return true
} ...

运行程序, 看到自己在ViewController里设置的View.

Ta-da!

[Android开发学iOS系列] 删除storyboard需要几步的更多相关文章

  1. [Android开发学iOS系列] 工具篇: Xcode使用和快捷键

    [Android开发学iOS系列] 工具篇: Xcode使用和快捷键 工欲善其事必先利其器. 编辑 Cmd + N: 新建文件 Option + Cmd + N: 新建文件夹 Cmd + / : 注释 ...

  2. [Android开发学iOS系列] iOS写UI的几种方式

    [Android开发学iOS系列] iOS写UI的几种方式 作为一个现代化的平台, iOS的发展也经历了好几个时代. 本文讲讲iOS写UI的几种主要方式和各自的特点. iOS写UI的方式 在iOS中写 ...

  3. [Android开发学iOS系列] Auto Layout

    [Android开发学iOS系列] Auto Layout 内容: 介绍什么是Auto Layout. 基本使用方法 在代码中写约束的方法 Auto Layout的原理 尺寸和优先级 Auto Lay ...

  4. [Android开发学iOS系列] 语言篇: Swift vs Kotlin

    Swift vs Kotlin 这篇文章是想着帮助Android开发快速学习Swift编程语言用的. (因为这个文章的作者立场就是这样.) 我不想写一个非常长, 非常详尽的文章, 只是想写一个快速的版 ...

  5. [Android开发学iOS系列] TableView展现一个list

    TableView 基础 本文讲讲TableView的基本使用. 顺便介绍一下delegation. TableView用来做什么 TableView用来展示一个很长的list. 和Android中的 ...

  6. [Android开发学iOS系列] ViewController

    iOS ViewController 写UIKit的代码, ViewController是离不开的. 本文试图讲讲它的基本知识, 不是很深入且有点杂乱, 供初级选手和跨技术栈同学参考. What is ...

  7. [Android开发学iOS系列] 快速上手UIKit

    快速上手iOS UIKit UIKit是苹果官方的framework, 其中包含了各种UI组件, window和view, 事件处理, 交互, 动画, 资源管理等基础设施支持. 按照前面的介绍, 用U ...

  8. Android开发—智能家居系列】(二):用手机对WIFI模块进行配置

    在实际开发中,我开发的这款APP是用来连接温控器,并对温控器进行控制的.有图为证,哈哈. 上一篇文章[Android开发—智能家居系列](一):智能家居原理的文末总结中写到: 手机APP控制智能温控器 ...

  9. Android开发中使用代码删除数据库

    更多信息参考:Android开发中使用代码删除数据库 在Android开发中,如果用到数据库,就会有一个很麻烦的问题,就是有时候需要删除数据库很麻烦,要打开Android Device Monitor ...

  10. android开发学习笔记系列(1)-android起航

    前言 在学习安卓的过程中,我觉得非常有必要将自己所学的东西进行整理,因为每每当我知道我应该是如何去实现功能的时候,有许多细节问题我总是会遗漏,因此我也萌生了写一系列博客来描述自己学习的路线,让我的an ...

随机推荐

  1. C++ 虚基类

    虚基类(Virtual Base Class)在面向对象编程中的作用是解决多重继承中的菱形继承问题(Diamond Inheritance Problem)和共享基类问题(Shared Base Cl ...

  2. go-ini解析ini文件

    文档 https://github.com/go-ini/ini https://ini.unknwon.io/docs/intro/getting_started go get -u gopkg.i ...

  3. Jetpack Compose(1) —— Android 全新的 UI 框架

    写在前面 Jetpack Compose 已经不是什么新技术了,Google 早在 2019 年就推出 Jetpack Compose 的首个 alpha 版本,时至今日,相当大比例的国内 Andro ...

  4. 【LeetCode二叉树#02】二叉树层序遍历(广度优先搜索),十合一专题

    二叉树层序遍历(广度优先搜索) 102 二叉树的层序遍历 力扣题目链接(opens new window) 给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). ...

  5. 【Azure Notification Hub】如何手动删除 Notification Hub 中已注册的设备

    问题描述 在Notification Hub中注册了设备后,从Azure门户上没有找到相应的入口来删除已注册设备 (Active Devices) 如果使用C# SDK是否有办法删除呢? 问题解答 可 ...

  6. 【Azure 应用服务】App Service的运行状况检查功能失效,一直提示"实例运行不正常"

    问题描述 为App Service配置了健康检查,单独访问Health Check Path的路径,返回代码为200.但为什么在App Service的页面上,一直提示"实例运行不正常&qu ...

  7. 从零开始写 Docker(三)---基于 cgroups 实现资源限制

    本文为从零开始写 Docker 系列第三篇,在mydocker run 基础上基于 cgroups 实现容器的资源限制. 完整代码见:https://github.com/lixd/mydocker ...

  8. Glide源码解析四(解码和转码)

    本文基于Glide 4.11.0 Glide加载过程有一个解码过程,比如将url加载为inputStream后,要将inputStream解码为Bitmap. 从Glide源码解析一我们大致知道了Gl ...

  9. 为SQL Server配置连接加密

    前言 很多客户在对数据库做安全审计时要求配置连接加密,本文就如何配置加密以及使用证书做一个系统的整理. 连接加密 首先,连接加密不是透明数据加密,很多人经常把两个概念混淆.连接加密是指客户端程序和SQ ...

  10. STM32 LwIP学习过程问题总结(一):LwIP ping不通,抓包发现ICMP校验和为0x0000

    一.问题 今天在将之前的STM32 LwIP1.4.1版本程序移植到2.1.2版本上时,发现ping不同,但是开发板有ICMP回复包,黄颜色警告checksum为0x0000.说明LwIP移植应该是没 ...