如何通过代码打开弹出窗口

时间:2018-05-25 19:18:47

标签: swift popup

我是一个非常新手的快速程序员,他正在尝试执行以下操作:我有一个简单的游戏,通过按某些按钮生成弹出窗口(通过单独的视图控制器)。我还想添加一些代码(在某些事件之后运行)在某些条件下打开弹出窗口。为此,我创建了一个新的视图和视图控制器并将它们链接起来。整个视图控制器如下所示:

import UIKit

class P2_Gift_Pop_Up: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        print("I was here")

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }   
}

现在我尝试通过在主viewcontroller的代码中使用以下行来调用此视图控制器(以使弹出视图):

P2_Gift_Pop_Up()

当我运行应用程序时,Swift接受了这一点,没有任何反应。我做错了什么?

2 个答案:

答案 0 :(得分:1)

class MainViewController: UIViewController {

    let button = UIButton()

    override func viewDidLoad() {
        super.viewDidLoad()

        // setup button frame or constraint.. (unless done in IB)

        // add target to button (or add an IBOutlet from IB)

        button.addTarget(self, action: #selector(buttonClicked(_ :)), for: .touchUpInside)
    }

    @objc func buttonClicked(_ sender: UIButton) {
        let vc = P2_Gift_Pop_Up()
        vc.modalPresentationStyle = .overCurrentContext
        present(vc, animated: true, completion: nil)
    }
}

P2_Gift_Pop_Up VC里面:

class P2_Gift_Pop_Up: UIViewController {

    let dismissButton = UIButton()

    override func viewDidLoad() {
        super.viewDidLoad()

        // setup button frame or constraint
        // ..

        // add target to button

        dismissButton.addTarget(self, action: #selector(buttonClicked(_ :)), for: .touchUpInside)
    }

    @objc func buttonClicked(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }
}

在viewController中调用P2_Gift_Pop_Up()不会显示它,在您的情况下,模式演示效果很好,因为您希望弹出P2_Gift_Pop_Up()

答案 1 :(得分:0)

由于我不想使用按钮,因此我只在主视图控制器中使用了以下代码段。

let vc = P2_Gift_Pop_Up()
vc.modalPresentationStyle = .overCurrentContext 
present(vc, animated: true, completion: nil)

这开始在弹出窗口中运行代码,没有任何按钮,即我想要的。

但是,当我运行以下代码时

import UIKit

class P2_Gift_Pop_Up: UIViewController {


@IBOutlet weak var Slot1: UIButton!

override func viewDidLoad() {
    super.viewDidLoad()



    Slot1.setImage(UIImage(named: "Card 2 Red"), for: .normal)

  }

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

}

我收到以下错误:线程1:致命错误:在解开可选值时意外发现nil

有什么问题?使用主视图控制器中的按钮打开弹出窗口中的相同代码。

聚苯乙烯。很抱歉,如果发布这个作为我自己的问题的答案是错误的方式来解决这个问题(当我包含代码时评论变得不可读,编辑原始的quesstion会改变我原来想知道的,我会回答我原来的问题想知道)