【问题标题】:PopUpViewController won't pop up more then once. SWIFTPopUpViewController 不会再弹出一次。迅速
【发布时间】:2023-03-15 16:30:01
【问题描述】:

我有PopUpViewControllerSwift,我想一次又一次地弹出它,直到alreadyMatched 索引达到零。这就是我执行弹出窗口的方式,代码:

var alreadyMatched = [0,1,2]   

class QuestionsGame: UIViewController {

         var popUpViewController = PopUpViewControllerSwift()

   override func viewDidLoad() {
    super.viewDidLoad()

       matched()
}


    func matched() { 

        var a = alreadyMatched.count   
        if a > 0 {

            self.view.addSubview(self.popUpViewController.view)
            self.addChildViewController(self.popUpViewController)
            self.popUpViewController.setValues(UIImage(named: "hot.png"), messageText: "You have matched!!", congratsText: "Snap!")
            self.popUpViewController.didMoveToParentViewController(self)
            alreadyMatched.removeLast()
            }
        }
}

PopUpViewControllerSwiftcode 是:

@objc class PopUpViewControllerSwift : UIViewController {

    var popUpUserImage: UIImageView!
    var messageLabel: UILabel!
    var popUpView: UIView!
    var congratsLabel: UILabel!
    var matchedOrNot = 2

    var matchedUser : PFUser!

    override func viewDidLoad() {
        super.viewDidLoad()

    }


    func setValues(image : UIImage!, messageText : String, congratsText : String) {
        self.popUpUserImage!.image = image
        self.messageLabel!.text = messageText
        self.congratsLabel.text = congratsText
    }

    func showAnimate()
    {
        self.view.transform = CGAffineTransformMakeScale(1.3, 1.3)
        self.view.alpha = 0.0;
        UIView.animateWithDuration(0.25, animations: {
            self.view.alpha = 1.0
            self.view.transform = CGAffineTransformMakeScale(1.0, 1.0)
        });
    }

    func removeAnimate()
    {
        UIView.animateWithDuration(0.25, animations: {
            self.view.transform = CGAffineTransformMakeScale(1.3, 1.3)
            self.view.alpha = 0.0;
            }, completion:{(finished : Bool)  in
                if (finished)
                {
                    self.view.removeFromSuperview()
                    let sb = UIStoryboard(name: "Main", bundle: nil)
                      let questionsVC =   sb.instantiateViewControllerWithIdentifier("Questions") as! QuestionsGame
                      questionsVC.timer()

                }
        })
    }
}

由于某种原因,这只会弹出一次,不会重复?我确定这与 ParentViewController 有关?

【问题讨论】:

    标签: swift uiviewcontroller popup childviewcontroller parentviewcontroller


    【解决方案1】:

    您的QuestionsGame 的第一个实例显示在屏幕上。在 viewDidLoad 中,您执行 matched() 并将弹出框的视图放在此实例中,该实例显示了弹出框。这可以正常工作。

    现在您想再次显示它的部分:您有一个按钮创建QuestionsGamenew 实例,代码如下:

    let questionsVC = sb.instantiateViewControllerWithIdentifier("Questions") as! QuestionsGame
    

    您再次手动访问matched()(导致它被调用两次,一次在 viewDidLoad 中,一次手动)此方法会将您的弹出窗口的视图放入 new 实例中,但您赢了'看不到这一切,因为 new 实例不在视图中。

    编辑:

    如果您想创建一个新的弹出窗口,使用委托将是一种简单的方法。我已经在另一个answer 中解释了委托的使用。我不确定您是如何消除弹出窗口的,但这是另一个问题。如果你想在你的 popover 中创建一个新的 popover,你可以使用一个委托来访问方法 matched(),这样新的 popover 就会显示在你当前视图的顶部。

    【讨论】:

    • 抱歉,这不正确。 a 将是 3,但随后使用 alreadyMatched.removeLast() 将使其变为 2。仍然大于 0。if 语句运行良好,问题是视图控制器不会运行超过一次。
    • 否,因为如果您阅读代码,一旦从视图中移除 popUpViewController,就会再次调用函数matched(),以重复该过程直到计数达到 0。不需要 for in 循环.
    • 嗯,没有阅读你的 popover 类的代码。您确实应该删除与您的问题无关的代码(并修复标记)。让帮助您的人更具可读性。
    • popUpViewController 非常相关,它无法正常工作的原因和问题。
    • 问题在于如何调用popUpViewController 并使其成为childViewController。我想?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多