gpt4 book ai didi

ios - Swift:无法在自定义 View 上调用 removeFromSuperview()

转载 作者:搜寻专家 更新时间:2023-11-01 06:22:48 25 4
gpt4 key购买 nike

我正在尝试向我的应用添加进度指示器。首先,我创建一个 overlayView 并将其添加到 self.navigationController!.view,然后将 SwiftProgressView 添加到 overlayView

这非常有效,但问题是当我尝试删除 ** SwiftProgressView** 时...当我在 SwiftProgressView 上调用 removeFromSuperview() 应用程序崩溃时以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

这是我创建 View 的方式(AIView 是我创建的自定义 View ,其中包含事件指示器):

private var AIView: ActivityIndicatorView?
private var overlayView: UIView?

这就是我尝试删除它们的方式:

    if let xy = AIView {
xy.removeFromSuperview()
}

overlayView?.removeFromSuperview()

我不知道为什么我不能直接在 ActivityIndi​​catorView 上调用 .removeFromSuperview() 而是通过展开可选的 ActivityIndi​​catorView?我可以调用 .removeFromSuperview() 但出现错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

如果有人能弄清楚这里的问题是什么,那将是一个很大的帮助。提前致谢。

--- --- 编辑

在未能弄清楚问题出在哪里之后,我用一个测试类重新创建了相同的场景,但没有使用前一个场景中的所有花哨的东西:

    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: 方法中

最佳答案

ActivityIndi​​catorView 是类型,而不是对象本身。

你应该这样做:

if let xy = AIView {
xy.removeFromSuperview()
}

或者这个:

AIView?.removeFromSuperview()

关于ios - Swift:无法在自定义 View 上调用 removeFromSuperview(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30406011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com