【发布时间】:2021-04-14 08:09:36
【问题描述】:
我正在构建一个正在运行的应用程序,并尝试在点击开始运行按钮时以编程方式呈现一个视图控制器。但是,当我在设置呈现视图控制器后点击按钮时,在按调用顺序展开时,发现对 IBOutlet 的任何引用都为零。
值得注意的是,当我通过情节提要将两个视图控制器与“显示”连接时,一切正常,但我想以编程方式全屏显示视图控制器,而不是默认情况下的卡片式演示。
从呈现视图控制器:
@IBAction func startRunTapped(_ sender: Any) {
let inRunVC = CurrentRunVC()
inRunVC.modalPresentationStyle = .fullScreen
self.present(inRunVC, animated: true, completion: nil)
}
从呈现的视图控制器:
import UIKit
import MapKit
class CurrentRunVC: LocationVC {
@IBOutlet weak var sliderImageView: UIImageView!
@IBOutlet weak var swipeBGImageView: UIImageView!
@IBOutlet weak var durationLabel: UILabel!
@IBOutlet weak var paceLabel: UILabel!
@IBOutlet weak var distanceLabel: UILabel!
@IBOutlet weak var pauseButton: UIButton!
var startLocation: CLLocation!
var lastLocation: CLLocation!
var timer = Timer()
var runDistance = 0.0
var pace = 0
var counter = 0
override func viewDidLoad() {
super.viewDidLoad()
let swipeGesture = UIPanGestureRecognizer(target: self, action: #selector(endRunSwiped(sender:)))
sliderImageView.addGestureRecognizer(swipeGesture) //error unwrapping here
sliderImageView.isUserInteractionEnabled = true // and here
swipeGesture.delegate = self as? UIGestureRecognizerDelegate
}
//errors also on any other reference to an IBOutlet
我已确认所有 IBOutlets 均已正确连接。
故事板:
提前致谢
【问题讨论】:
-
您没有初始化将其与其 Storyboard 版本连接起来的 ViewController。你需要使用
UIStoryboard(name: "storyboardName", bundle: nil).instantiateViewControllerWithIdentifier("CurrentRunVC")作为! CurrentRunVC` -
但是使用 Storyboard,您可以选择“Present Modally”而不是“Show”,然后选择“Presentation”:“Full Screen”
标签: ios swift viewcontroller presentmodalviewcontroller presentviewcontroller