【问题标题】:How to instantiate view controller, IBOutlets are nil when functions are called如何实例化视图控制器,调用函数时IBOutlets为零
【发布时间】:2022-01-13 04:05:32
【问题描述】:

这是我的弹出视图控制器:

import UIKit

class PopupViewController: UIViewController {
    
    var bigVC = GameViewController()
    var cardPhoto: UIImage?
    var nameLabel: String?
    var bio: String?
    var index: Int?
    
    @IBOutlet weak var photo: UIImageView!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var story: UILabel!
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        let storyboard: UIStoryboard = UIStoryboard.init(name: "Main", bundle: nil)
        let firstViewController: GameViewController = storyboard.instantiateViewController(withIdentifier: "GameScreen") as! GameViewController
        
        photo.image = cardPhoto
        label.text = nameLabel
        story.text = bio
        
        
    }
    
    
    @IBAction func removePressed(_ sender: UIButton) {
        
        bigVC.removingCard(indexToRemove: index!)
        bigVC.resetImages()
        dismiss(animated: true, completion: nil)
        
    }
    
    
}

我的函数 bigVC.resetImages() 需要更改为 UIButtons 数组中 7 个按钮的图像。该函数完美运行,但当从其他视图控制器调用该函数时,数组返回 nil 并且应用程序崩溃。如何正确实例化视图控制器以便我调用这些按钮?

这是纸牌游戏的弹出视图控制器。它有一个按钮,按下该按钮应从玩家手中取出一张卡片并关闭弹出窗口以返回游戏视图控制器。怎么换

【问题讨论】:

    标签: swift xcode viewcontroller


    【解决方案1】:

    你需要设置

    self.bigVC = firstViewController
    

    然后需要等到 GameViewController 加载(调用 viewDidLoad)后再调用 resetImages。所以该数组不会返回 nil。

    【讨论】:

    • 我在哪里做呢?在我的弹出视图控制器的 viewDidLoad 中?在我调用重置之前,我是否在我的函数中调用 bigVC.viewDidLoad()?不确定如何实施此解决方案...
    【解决方案2】:

    试试这个

    @IBAction func removePressed(_ sender: UIButton) {
        let firstViewController = storyboard?.instantiateViewController(withIdentifier: "GameScreen") as! GameViewController
        
        firstViewController.removingCard(indexToRemove: index!)
        firstViewController.resetImages()
        dismiss(animated: true, completion: nil)
        
    }
    

    【讨论】:

    • 这也会导致同样的崩溃并显示同样的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2017-08-01
    • 2016-08-23
    • 2015-03-24
    • 2015-04-05
    相关资源
    最近更新 更多