swift - 以编程方式快速呈现一个新的视图控制器/以编程方式给一个类一个标识符
问题描述
我已经创建了一个简单的应用程序,它使用情节提要来呈现一个新的页面/类。但是,我想以编程方式做同样的事情。
我最初的 ViewController.swift 文件如下所示:
import UIKit
class ViewController: UIViewController {
var mainImageView: UIImageView!
var chooseButton: UIButton!
var nameLabel: UILabel!
override func loadView() {
view = UIView()
view.backgroundColor = .white
let chooseButton = UIButton(type: .custom) as UIButton
chooseButton.backgroundColor = .blue
chooseButton.layer.borderColor = UIColor.darkGray.cgColor
chooseButton.layer.borderWidth = 2
chooseButton.setTitle("Pick a side", for: .normal)
chooseButton.frame = CGRect(x: 100, y: 100, width: 200, height: 100)
chooseButton.addTarget(self, action: #selector(clickMe), for: .touchUpInside)
chooseButton.layer.cornerRadius = chooseButton.frame.size.height/2
self.view.addSubview(chooseButton)
self.nameLabel = UILabel()
nameLabel.text = "Here is your side"
nameLabel.textAlignment = .center
nameLabel.backgroundColor = .cyan
nameLabel.frame = CGRect(x: 100, y: 400, width: 200, height: 100)
self.view.addSubview(nameLabel)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@objc func clickMe(sender:UIButton!) {
print("Button Clicked")
self.nameLabel.text = "updated title"
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let loadVC = storyBoard.instantiateViewController(withIdentifier: "SelectionScreen") as! SelectionScreen
self.present(loadVC, animated: true, completion: nil)
}
当我按下按钮时,我收到以下错误:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“Storyboard () 不包含标识符为“SelectionScreen”的视图控制器”
我使用 Cocoa Touch 类创建了下一个 Viewcontroller:
import UIKit
class SelectionScreen: UIViewController {
override func loadView() {
view = UIView()
view.backgroundColor = .red
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
当我最初使用 Storyboard 执行此操作时,我使用 Identity Inspector 来设置 Storyboard ID,以便 instantiateViewController(withIdentifier:) 可以加载我想要查看的新类。如何在不使用情节提要的情况下为 SelectionScreen 类提供标识符?
解决方案
如果您不使用情节提要,则不需要标识符。只需实例化并呈现它。
let loadVC = SelectionScreen()
self.present(loadVC, animated: true, completion: nil)
推荐阅读
- python - 如何将 JSON MySQL 列查询到字典中?
- javascript - 使用 webNavigation.onCommitted 将脚本注入网页
- r - data.table 问题:如何不覆盖原始数据框
- python-requests - 在 Python 中调用 AWS API 网关时出现 403 禁止错误
- sql - 从列返回第一个非空结果
- python - 为什么在一个大矩阵 $M$ 上的 NumPy 减法比将 $M$ 分成更小的矩阵然后减法时要慢?
- ionic-framework - 自定义 ngx-translate 加载器,接收无法设置未定义的属性“http”
- python - 如果我们已经有它的实例,如何优化相关对象的延迟加载?
- python - 使用特定列中的数据的某些条件删除数据框中的重复行
- docker - docker 启动 apache 和 neo4j 后立即退出