Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在适用于各种视图控制器的swift文件模型中创建警报_Ios_Swift - Fatal编程技术网

Ios 如何在适用于各种视图控制器的swift文件模型中创建警报

Ios 如何在适用于各种视图控制器的swift文件模型中创建警报,ios,swift,Ios,Swift,我是iOS开发的初学者。我正在尝试制作一个Swift文件,其中只包含一个显示警报的方法。此模型将在某些视图控制器中使用 我制作了一个Swift文件,发出警报的代码如下: import UIKit class Alert : UIAlertController { func showAlert (alertTitle: String, alertMessage: String, actionTitle: String) { let alert = UIAlertContr

我是iOS开发的初学者。我正在尝试制作一个Swift文件,其中只包含一个显示警报的方法。此模型将在某些视图控制器中使用

我制作了一个Swift文件,发出警报的代码如下:

import UIKit

class Alert : UIAlertController {
    func showAlert (alertTitle: String, alertMessage: String, actionTitle: String) {
        let alert = UIAlertController(title: alertTitle, message: alertMessage, preferredStyle: .alert)
        let alertAction1 = UIAlertAction(title: actionTitle, style: .default) { (action) in

        }

        alert.addAction(alertAction1)
        present(alert, animated: true, completion: nil)
    }
}
然后我在视图控制器中实现这个类

import UIKit

class ViewController: UIViewController {
    var x = 10
    var alert = Alert()

    override func viewDidLoad() {
        super.viewDidLoad()

        if x < 15 {
            test()
        }
    }

    func test() {
       alert.showAlert(alertTitle: "Opps", alertMessage: "less than 15", actionTitle: "OK")
    }
}
导入UIKit
类ViewController:UIViewController{
变量x=10
var alert=alert()
重写func viewDidLoad(){
super.viewDidLoad()
如果x<15{
测试()
}
}
func测试(){
alert.showAlert(alertTitle:“Opps”,alertMessage:“小于15”,actionTitle:“OK”)
}
}
但我有一个错误:

警告:尝试显示其视图不在窗口层次结构中的对象


我该怎么办?

该错误说明了一切:您正在创建警报实例,即UIAlertController,它正在创建另一个UIAlertController,您希望在该警报实例上显示该实例,而该实例甚至不由视图控制器显示

为什么不简单地用这个方法为UIViewController创建一个扩展呢

请尝试以下操作:

extension UIViewController {
    func showAlert(title: String, message: String, …) {
        …
        present(alert, animated: true, completion: nil)
    }
}
您可以从任何UIViewController调用此方法,它将创建从UIViewController显示的UIAlertController:

// from your UIViewController code, for example from viewDidAppear method
self.showAlert(title: "Wow!", message: "It works!", actionTitle: "Dismiss")

该错误说明了一切:您正在创建Alert实例,即UIAlertController,它正在创建另一个UIAlertController,您希望在该Alert实例上显示该实例,而视图控制器甚至没有显示该实例

为什么不简单地用这个方法为UIViewController创建一个扩展呢

请尝试以下操作:

extension UIViewController {
    func showAlert(title: String, message: String, …) {
        …
        present(alert, animated: true, completion: nil)
    }
}
您可以从任何UIViewController调用此方法,它将创建从UIViewController显示的UIAlertController:

// from your UIViewController code, for example from viewDidAppear method
self.showAlert(title: "Wow!", message: "It works!", actionTitle: "Dismiss")

您的
Alert
类没有理由扩展
UIViewController
,因为您的
Alert
类不是视图控制器

您应该做的是通过扩展将您的
showAlert
方法设置为
UIViewController
的方法

更改:

class Alert : UIAlertController {
致:

然后,当您想要显示来自视图控制器(例如
ViewController
类)的警报时,只需调用
showart

class ViewController: UIViewController {
    func test() {
       showAlert(alertTitle: "Opps", alertMessage: "less than 15", actionTitle: "OK")
    }
}

您的
Alert
类没有理由扩展
UIViewController
,因为您的
Alert
类不是视图控制器

您应该做的是通过扩展将您的
showAlert
方法设置为
UIViewController
的方法

更改:

class Alert : UIAlertController {
致:

然后,当您想要显示来自视图控制器(例如
ViewController
类)的警报时,只需调用
showart

class ViewController: UIViewController {
    func test() {
       showAlert(alertTitle: "Opps", alertMessage: "less than 15", actionTitle: "OK")
    }
}