我' m致力于简单的倒计时器(Swift)。当时间到达" 0"时,我想显示alertView。为此,我使用JSSAlertView pod。
一切运作良好,但有了这个alertView我也得到了这个:警告:尝试呈现已经呈现的
我该如何解决?
我没有使用Storyboard或Xib文件。一切都是以编程方式编写的 我尝试使用Google找到了不同的解决方案 - 没有任何方法可以帮助我。
P.S。 我在下面附上了我的代码。我有两个ViewControllers:
第一个viewController有开始按钮:
class FirstViewController: UIViewController {
func startButtonCLicked(_ button: UIButton) {
let controller = SecondViewController()
present(controller, animated: true)
}
}
第二个viewController有timer功能和alertView:
class SecondViewController: UIViewController {
func updateTimer() {
if seconds > 0 {
print(seconds)
seconds -= 1
timerLabel.text = String(Timer.timeFormatted(seconds))
} else {
let alertview = JSSAlertView().show(self,
title: "Hey",
text: "Hey",
buttonText: "Hey",
color: UIColorFromHex(appColor.hexMainOrangeColor, alpha: 1))
alertview.setTextTheme(.light)
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if timer.isValid == false {
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(SecondViewController.updateTimer) , userInfo: nil, repeats: true)
}
}
}
干杯!
答案 0 :(得分:0)
解决。
我收到了这个错误,因为只要"秒== 0"我开始经常叫alertView:
func updateTimer() {
if seconds > 0 {
print(seconds)
seconds -= 1
timerLabel.text = String(Timer.timeFormatted(seconds))
} else {
let alertview = JSSAlertView().show(self,
title: "Hey",
text: "Hey",
buttonText: "Hey",
color: UIColorFromHex(appColor.hexMainOrangeColor, alpha: 1))
alertview.setTextTheme(.light)
}
}
要修复它,我创建了全局Bool - secondsLeft并将其指定为false。我把这个Bool放在我的代码里面这样:
func updateTimer() {
if seconds > 0 {
print(seconds)
seconds -= 1
timerLabel.text = String(Timer.timeFormatted(seconds))
} else if seconds == 0 && !secondsLeft {
secondsLeft = true
let alertview = JSSAlertView().show(self,
title: "Hey",
text: "Hey",
buttonText: "Hey",
color: UIColorFromHex(appColor.hexMainOrangeColor, alpha: 1))
alertview.setTextTheme(.light)
alertView.addAction(
self.dismiss(self, animated: true, completion: nil))
}
}
现在,在调用alertView之前,我要检查秒== 0和secondsLeft == false。如果是,则alertView显示,secondsLeft变为 - true,并且我不再调用alertView。 在viewDidAppear里面我再次将secondsLeft指定为false。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
secondsLeft = false
if timer.isValid == false {
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(SecondViewController.updateTimer) , userInfo: nil, repeats: true)
}
}
}
所以,它有效......但现在我又得到了另一个Warning: Attempt to present <JSSAlertView.JSSAlertView: 0x7feb1c830a00> on <MyApp.TimerViewController: 0x7feb1be05650> whose view is not in the window hierarchy!
有什么想法吗?