我正在尝试向我的应用添加进度指示器。首先,我创建一个 overlayView 并将其添加到self.navigationController!.view,然后将 SwiftProgressView 添加到 overlayView 。
这很有效,但问题是我尝试删除** SwiftProgressView ** ...当我在 SwiftProgressView 上调用removeFromSuperview()
时,应用程序崩溃并出现以下错误:< / p>
致命错误:在解包可选值时意外发现nil
以下是我创建观点的方式(AIView是我创建的自定义视图,其中包含活动指示符):
private var AIView: ActivityIndicatorView?
private var overlayView: UIView?
这就是我尝试删除它们的方式:
if let xy = AIView {
xy.removeFromSuperview()
}
overlayView?.removeFromSuperview()
我不知道为什么我不能直接在ActivityIndicatorView上调用.removeFromSuperview()
,而是通过展开可选的ActivityIndicatorView?我可以拨打.removeFromSuperview()
但我收到错误:
致命错误:在解包可选值时意外发现nil
如果有人能够弄清楚这里的问题会有什么帮助。提前谢谢。
--- ---编辑
在未能弄清楚问题是什么之后,我用一个测试类重新创建了相同的场景,而没有上一个的所有铃声和声音:
class tempTest : NSObject {
var progressView: SwiftProgressView?
var overlayView: UIView?
func go(parentView:UIView) {
if let ov = createOverlay(parentView.frame) {
if let pv = createProgressView() {
ov.addSubview(pv)
parentView.addSubview(ov)
} else {
println("Unable to create OverlayView.")
}
} else {
println("Unable to create OverlayView.")
}
}
func createOverlay(frame:CGRect) -> UIView? {
// Initializing Overlay view
overlayView = UIView(frame: frame)
overlayView?.backgroundColor = UIColor(red: 0.1, green: 0.1, blue: 0.1, alpha: 0.3)
// Adding tap gesture
let tapGest = UITapGestureRecognizer(target: self, action: Selector("overlayTapped:"))
tapGest.numberOfTapsRequired = 1
overlayView?.addGestureRecognizer(tapGest)
// Return the created overlay
return overlayView
}
func createProgressView() -> SwiftProgressView? {
// Create progressView
progressView = SwiftProgressView()
// Configure Options
progressView?.setIndicatorOfType(SwiftProgressIndicatorType.activityIndicator)
progressView?.setTitleText("Test")
progressView?.setDetailText("This is a Test")
// Return progressView
return progressView
}
func overlayTapped(recognizer: UITapGestureRecognizer){
if var pv = progressView {
pv.removeFromSuperview()
}
if var ov = overlayView {
ov.removeFromSuperview()
}
// This generates the same error
// progressView!.removeFromSuperview();
// overlayView!.removeFromSuperview();
}
}
应用程序在执行此语句时崩溃:
pv.removeFromSuperview()
如果我评论此代码:
if var pv = progressView {
pv.removeFromSuperview()
}
然后应用程序不会崩溃,而是会删除叠加层,但是当我尝试再次显示叠加层时,它会在此声明中崩溃:
overlayView = UIView(frame: frame)
在createOverlay:method
中答案 0 :(得分:4)
ActivityIndicatorView
是类型,而不是对象本身。
你应该这样做:
if let xy = AIView {
xy.removeFromSuperview()
}
或者这个:
AIView?.removeFromSuperview()