PopUpViewController не появится больше одного раза. СВИФТ

Я имею 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()
            }
        }
}

и PopUpViewControllerSwiftкод является:

@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?

1 ответ

Ваш первый экземпляр QuestionsGame показывает на экране. В viewDidLoad вы выполняете matched() и поместите представление вашего popover в этом случае, который показывает popover. Это работает правильно.

Теперь часть, где вы хотите показать это снова: у вас есть кнопка, создающая новый экземпляр QuestionsGame с кодом:

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

вы получили доступ matched() снова вручную (что приводит к тому, что он вызывается дважды, один в viewDidLoad и один вручную). Этот метод поместит представление вашего popover в новый экземпляр, но вы не увидите всего этого, потому что новый экземпляр не отображается.

РЕДАКТИРОВАТЬ:

Если вы хотите создать новое всплывающее окно, использование делегата было бы простым способом сделать это. Я объяснил использование делегата в другом ответе. Я не уверен, как вы отклоняете свой поповер, хотя это еще одна проблема. Если вы хотите создать новый поповер внутри вашего поповера, вы можете использовать делегата для доступа к методу matched() поэтому новый поповер будет показан поверх вашего текущего представления.

Другие вопросы по тегам