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()
поэтому новый поповер будет показан поверх вашего текущего представления.