gpt4 book ai didi

iOS Swift - 来自其他类的函数不运行

转载 作者:行者123 更新时间:2023-11-29 02:03:55 25 4
gpt4 key购买 nike

我想创建一个具有模糊 View 的类,如果出现任何问题,该类应该出现在现有 View 上。这是代码:

import Foundation
import UIKit

class checkProblems{

let effectView:UIVisualEffectView = UIVisualEffectView (effect: UIBlurEffect(style: UIBlurEffectStyle.Light))
var view: UIView
let label = UILabel()
let retry = UIButton()

init(view: UIView){
self.view = view
self.check()
}

func check(){
effectView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
label.frame = CGRectMake(0, (self.view.frame.height/2)-20, self.view.frame.width, 40)
label.text = "Server connection problems."
label.textAlignment = NSTextAlignment.Center
label.textColor = UIColor.darkGrayColor()
label.font = UIFont (name: "HelveticaNeue-Light", size: 20)

retry.frame = CGRectMake(0, (self.view.frame.height/2)+10, self.view.frame.width, 40)
retry.setTitle("Tap here to retry.", forState: UIControlState.Normal)
retry.addTarget(self, action: "pressed:", forControlEvents: .TouchUpInside)

self.view.addSubview(effectView)
effectView.addSubview(label)
effectView.addSubview(retry)
}

func pressed(sender: UIButton!){
println("here")
}
}

这就是我在 View Controller 上调用它的方式:

let checkObject = checkProblems(view: view)

一切正常,直到我按下“点击此处重试”按钮。然后,我的应用程序崩溃了。

最佳答案

我认为您的方法打破了 MVC 模式。其次是addAction方法对应引用的问题。请将所有 View 创建或交替代码添加到 viewController。这将使您的应用程序更容易理解。我更改了您的代码以正确实现 MVC 模式(并使其完全可运行)

import UIKit

class ViewController: UIViewController {

let effectView:UIVisualEffectView = UIVisualEffectView (effect: UIBlurEffect(style: UIBlurEffectStyle.Light))
let label = UILabel()
let retry = UIButton()

override func viewDidLoad() {
super.viewDidLoad()
check()
}

func check(){
effectView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
label.frame = CGRectMake(0, (self.view.frame.height/2)-20, self.view.frame.width, 40)
label.text = "Server connection problems."
label.textAlignment = NSTextAlignment.Center
label.textColor = UIColor.darkGrayColor()
label.font = UIFont (name: "HelveticaNeue-Light", size: 20)

retry.frame = CGRectMake(0, (self.view.frame.height/2)+10, self.view.frame.width, 40)
retry.backgroundColor = .blueColor()
retry.setTitle("Tap here to retry.", forState: UIControlState.Normal)
retry.addTarget(self, action: "pressed:", forControlEvents: UIControlEvents.TouchUpInside)

effectView.addSubview(label)
effectView.addSubview(retry)
view.addSubview(effectView)
}
func pressed(sender: UIButton){
println("here")
}
}

除了您的评论之外,我还向您展示了一个 MVC 保护方法的示例,它将子类化 UIViewController。然后,您可以使用 presentViewController 加载 checkProblems 类:

来自调用 VC 的代码:

import UIKit    
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let checkProblemsVC = CheckProblemsViewController()
presentViewController(checkProblemsVC, animated: true, completion: nil)
}
}

以及新的子类 CheckProblemsViewController:

    import UIKit

class CheckProblemsViewController: UIViewController {

let effectView:UIVisualEffectView = UIVisualEffectView (effect: UIBlurEffect(style: UIBlurEffectStyle.Light))
let label = UILabel()
let retry = UIButton()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
check()
}

func check(){
effectView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
label.frame = CGRectMake(0, (self.view.frame.height/2)-20, self.view.frame.width, 40)
label.text = "Server connection problems."
label.textAlignment = NSTextAlignment.Center
label.textColor = UIColor.darkGrayColor()
label.font = UIFont (name: "HelveticaNeue-Light", size: 20)

retry.frame = CGRectMake(0, (self.view.frame.height/2)+10, self.view.frame.width, 40)
retry.backgroundColor = .blueColor()
retry.setTitle("Tap here to retry.", forState: UIControlState.Normal)
retry.addTarget(self, action: "pressed:", forControlEvents: UIControlEvents.TouchUpInside)

effectView.addSubview(label)
effectView.addSubview(retry)
view.addSubview(effectView)

}

func pressed(sender: UIButton){
println("here")
}


}

关于iOS Swift - 来自其他类的函数不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015458/

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