Я записался на курс по Swift / iOS Bootcamp для Udemy.До этого у меня не было проблем с кодом или уроками, но это поставило меня в тупик.Модуль предназначен для настройки UIAlertController и UIAlertAction, а также для сброса приложения викторины в начале теста.Тест работает как надо (по крайней мере, на данный момент), однако, как только появляется предупреждение, я не могу нажать на него.Он не распознает какие-либо касания или щелчки или не переходит к функции, которая должна вызываться при получении щелчка.
https://imgur.com/Z7Oc6kU
Я следую коду, как написанов курсе, но одна из проблем может заключаться в том, что курс использует более старую версию Swift / Xcode, чем я, но я не уверен на 100%.То, что может вызывать некоторую путаницу.
Однако я однажды попытался использовать Документацию Apple API, скопировав весь их пример кода и приспособившись к моим потребностям (с точки зренияфункции для вызова после «ОК»), но даже этот код не регистрирует щелчок.Я искал в стеке, изменил код, основанный на других форумах, и ничего не помогло.
func nextQuestion() {
if questionNumber <= allQuestions.list.count - 1 {
var nextQuestion = allQuestions.list[questionNumber]
questionLabel.text = nextQuestion.questionText
}
else {
let alert = UIAlertController(title: "Quiz Over", message: "You've Finished the Quiz, Press Restart to Start Over", preferredStyle: .alert)
let restartAction = UIAlertAction(title: "Restart", style: .default) { (UIAlertAction) in
self.startOver()
}
alert.addAction(restartAction)
self.present(alert, animated: true, completion: nil)
}
}
Как уже упоминалось, кнопка «Перезагрузить» в предупреждении должна принудительно запустить тест.Функция startOver () сбрасывает questionNumber в 0 и вызывает функцию nextQuestion (), а также выводит строку, чтобы я узнал, была ли вызвана функция, что будет означать, что нажатие зарегистрировано, но startOver ()функция неверна, но она не печатает строку, которая указывает, что функция вообще не вызывается.
Full ViewController:
import UIKit
class ViewController: UIViewController {
//Place your instance variables here
let allQuestions = QuestionBank()
var pickedAnswer : Bool = false
var questionNumber : Int = 0
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var scoreLabel: UILabel!
@IBOutlet var progressBar: UIView!
@IBOutlet weak var progressLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let firstQuestion = allQuestions.list[0]
questionLabel.text = firstQuestion.questionText
}
@IBAction func answerPressed(_ sender: AnyObject) {
if sender.tag == 1 {
pickedAnswer = true
}
else if sender.tag == 2 {
pickedAnswer = false
}
checkAnswer()
nextQuestion()
}
func updateUI() {
}
func nextQuestion() {
questionNumber += 1
if questionNumber <= allQuestions.list.count - 1 {
var nextQuestion = allQuestions.list[questionNumber]
questionLabel.text = nextQuestion.questionText
}
else {
let alert = UIAlertController(title: "Quiz Over", message: "You've Finished the Quiz, Press Restart to Start Over", preferredStyle: .alert)
let restartAction = UIAlertAction(title: "Restart", style: .default) { action in self.startOver()
}
alert.addAction(restartAction)
self.present(alert, animated: false, completion: nil)
}
}
func checkAnswer() {
if pickedAnswer == allQuestions.list[questionNumber].answer{
print("good")
}
else if pickedAnswer != allQuestions.list[questionNumber].answer{
print("bad")
}
}
func startOver() {
questionNumber = -1
nextQuestion()
print(questionNumber)
print("Restarting")
}
}