我想做一个只有在触摸按钮时才会出现的标签。 当在MainViewController中调用函数 hidden()它运行良好但是当我从ButtonAction类调用它(相同的函数)时,我得到一个经典错误:
在打开可选值时意外发现nil
以下是代码:
// MainViewController.swift
import UIKit
class MainViewController: UIViewController {
@IBOutlet weak var labelToShow: UILabel!
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
labelToShow.isHidden = true
}
func hidden() {
labelToShow.isHidden = true
}
func inHidden() {
labelToShow.isHidden = false
}
}
AND:
// ButtonAction.swift
import UIKit
class ButtonAction: UIButton {
var touched:Bool = false
var mainScreen = MainViewController()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
sleep(1)
mainScreen.hidden()
touched = true
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
mainScreen.inHidden()
touched = false
}
}
答案 0 :(得分:1)
使用默认初始值设定项mainScreen
创建的MainViewController()
实例与Interface Builder中设计的实例不同。
您需要对主视图控制器的实际引用(通过IBOutlet
或协议/委托等)。
答案 1 :(得分:0)
在该行代码中,您正在创建MainViewController的新实例:
var mainScreen = MainViewController()
您必须获取MainViewController()
实例的引用(由storyboard
自动创建)