【问题标题】:programmatically present a new view controller in swift/programmatically give a class an Identifier以编程方式快速呈现一个新的视图控制器/以编程方式给一个类一个标识符
【发布时间】:2020-01-12 00:08:50
【问题描述】:

我已经创建了一个简单的应用程序,它使用情节提要来呈现一个新的页面/类。但是,我想以编程方式做同样的事情。

我的初始 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 () 不包含带有标识符的视图控制器 '选择屏幕''

我使用 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 类提供标识符?

【问题讨论】:

  • 首先,一些问题: 1. 您是否尝试像这样为您的 SelectionScreen 设置 Storybard 标识符? stackoverflow.com/a/48612127/1040347 2. 或者你想避免这种方法?在这种情况下,您应该在“clickMe”函数中创建 SelectionScreen,例如:let selectionScreen = SelectionScreen(),然后执行 present 方法。请提供更多详细信息。

标签: swift uiviewcontroller viewcontroller


【解决方案1】:

如果您不使用情节提要,则不需要标识符。只需实例化并呈现它。

let loadVC = SelectionScreen()
self.present(loadVC, animated: true, completion: nil)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多