如何在 UiView 中显示 AlertController

How to display AlertController in UiView

Swift 的新手。下面的代码执行时没有错误,但在控制台中显示一条消息。这是一条错误消息以及如何解决?送审时是否需要修复

谢谢

这是我的应用程序结构:

VC(1)     -->  goto -->    VC(2)

在 VC(1) 我有:

我创建了一个 Link 到 VC(2) : Control-Drag BtnGo to VC(2)

我将 segue 命名为:SegueToVC2

我想做什么:

我需要将一个字符串传递给 VC2。在通过之前检查用户是否进行了选择。

在 PrepareForSegue 中,

override func PrepareForSegue(segue:UIStoryboardSegue, sender: AnyObject!) {

    var strchk: String = UIlabelMsg.text!

    if strchk.isEmpty {

        var alert = UIAlertController(title: "Alert",message:" No Selection made",
           preferredStyle: UIAlertControllerStyle.Alert)

        alert.AddAction(UIAlertction(title: "OK",style:UIAlertActionStyle.Default,hanlder: nil))

        self.presentViewController(alert, animated: true, completion: nil ) 

    } else {

    if (segue.Identifier =="SegueToVC2") {

        var targetVC = segue.destinationViewControl as! VC2
        targetVC.strMsg = UILabelMsg.text
    }
}

问题

在控制台中,显示如下:

UIView : 0x7fdfc25668c0; frame =(0,0,375,667); autoresize = w+h; layer = 's windows is not equal to 's View's Window!

我有这些问题

为什么我使用prepareForSegue时不需要为BtnGo写代码? 如果我有超过 2 个按钮?这 2 个将由 Segue 处理?

UIView没有presentViewController方法,self是什么?您可以使用 UIView 的 window 来演示。

let alert = UIAlertController(title: "Alert", message: "No Selection made", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.window?.rootViewController?.present(alert, animated: true, completion: nil)

编辑: 可能您需要覆盖 shouldPerformSegueWithIdentifier 以检查 UIlabelMsg.text.

override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {
    var strchk: String = UIlabelMsg.text!
    if strchk.isEmpty {
        var alert = UIAlertController(title: "Alert",message:" No Selection made",
        preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "OK",style:UIAlertActionStyle.Default,handler: nil))
        self.presentViewController(alert, animated: true, completion: nil)

        return false
    } else {
        return true
    }
}