VC 推送时线程 1 出错?
Thread 1 Error on VC push?
我的应用目前有 3 个 VC。 rootVC 通过 UIButton 模态显示第二个 VC——工作正常——但我无法让第三个 VC 在第二个 [=28] 中点击 UILabel 后出现=].
这是第二个VC中处理点击的代码:
var goToStats : UILabel {
var label = UILabel()
label.frame = CGRect(x:0, y:0, width: 300, height: 60)
label.center = CGPoint(x: view.center.x, y: view.center.y + 250)
label.text = "Statistical Breakdown"
label.font = UIFont(name: "Arial", size: 30)
label.textAlignment = .center
label.backgroundColor = UIColor(
displayP3Red: 1/255,
green: 102.0/255,
blue: 102.0/255,
alpha: 1)
label.isUserInteractionEnabled = true
label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
return label
}
view.addSubview(goToStats)
}
@objc func handleTap() {
print("Tapped!")
let thirdVC = ThirdVC()
self.navigationController!.present(thirdVC, animated: true, completion: nil)
}
运行 后,我收到以下错误:
error
有什么解释吗?我想也许没有与第二个 VC 关联的导航控制器(因为它返回 nil),但是 VC 本身位于导航堆栈上,所以我认为这里不是这种情况。是不是我的第三个VC有问题?这是当前代码:
import Foundation
import UIKit
class thirdVC : ViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.green
}
}
感谢您的宝贵时间!
你的 rootViewController
可能是 navigationController
但是当你 present
这样的东西时,
let secondVC = SecondVC()
self.navigationController!.present(secondVC, animated: true, completion: nil)
这并不意味着 SecondVC
会有 navigationController
。要为 SecondVC
设置 navigationController
,您需要将此 ViewController
嵌入 navigationController
中,如下所示,
let secondVC = SecondVC()
let secondNavC = UINavigationController(rootViewController: secondVC)
self.navigationController!.present(secondNavC, animated: true, completion: nil)
现在,如果您将 SecondVC
中的 ThirdVC
如下所示,那么它将起作用
let thirdVC = ThirdVC()
self.navigationController!.present(thirdVC, animated: true, completion: nil)
如果您没有在 UINavigationController
中嵌入第二个 ViewController
,那么您将遇到崩溃,因为您正在强制展开 (!
) navigationController
在秒 ViewController
.
内不可用
我的应用目前有 3 个 VC。 rootVC 通过 UIButton 模态显示第二个 VC——工作正常——但我无法让第三个 VC 在第二个 [=28] 中点击 UILabel 后出现=].
这是第二个VC中处理点击的代码:
var goToStats : UILabel {
var label = UILabel()
label.frame = CGRect(x:0, y:0, width: 300, height: 60)
label.center = CGPoint(x: view.center.x, y: view.center.y + 250)
label.text = "Statistical Breakdown"
label.font = UIFont(name: "Arial", size: 30)
label.textAlignment = .center
label.backgroundColor = UIColor(
displayP3Red: 1/255,
green: 102.0/255,
blue: 102.0/255,
alpha: 1)
label.isUserInteractionEnabled = true
label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap)))
return label
}
view.addSubview(goToStats)
}
@objc func handleTap() {
print("Tapped!")
let thirdVC = ThirdVC()
self.navigationController!.present(thirdVC, animated: true, completion: nil)
}
运行 后,我收到以下错误:
error
有什么解释吗?我想也许没有与第二个 VC 关联的导航控制器(因为它返回 nil),但是 VC 本身位于导航堆栈上,所以我认为这里不是这种情况。是不是我的第三个VC有问题?这是当前代码:
import Foundation
import UIKit
class thirdVC : ViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.green
}
}
感谢您的宝贵时间!
你的 rootViewController
可能是 navigationController
但是当你 present
这样的东西时,
let secondVC = SecondVC()
self.navigationController!.present(secondVC, animated: true, completion: nil)
这并不意味着 SecondVC
会有 navigationController
。要为 SecondVC
设置 navigationController
,您需要将此 ViewController
嵌入 navigationController
中,如下所示,
let secondVC = SecondVC()
let secondNavC = UINavigationController(rootViewController: secondVC)
self.navigationController!.present(secondNavC, animated: true, completion: nil)
现在,如果您将 SecondVC
中的 ThirdVC
如下所示,那么它将起作用
let thirdVC = ThirdVC()
self.navigationController!.present(thirdVC, animated: true, completion: nil)
如果您没有在 UINavigationController
中嵌入第二个 ViewController
,那么您将遇到崩溃,因为您正在强制展开 (!
) navigationController
在秒 ViewController
.