У меня есть строковый массив с именем languages, и я хочу создать столько UIAlertActions в UIAlertController, сколько есть элементов в массиве.Я не знаю, насколько большим будет массив, так как пользователь может добавлять языки в массив, используя опцию добавления из того же UIAlertController.
loadLanguages () успешно загружает данные userDefaults в массив языков, если естьсуществующие языки, которые были либо сохранены в качестве двух начальных языков при первой загрузке приложения и / или добавлены пользователем при последующем использовании приложения.
Опция добавления языка работает и сохраняется в userDfeaults (self.saveLanguages) и добавляется к массиву языков.
Однако я не уверен в создании опций UIAlertAction для каждого языка в массиве языков.Я попытался перебрать массив для создания каждого пункта меню, так как в массиве languages есть ответ о том, сколько UIAlertActions должно отображаться, но ничего не отображается.
После обширных поисков я ничего не нашелпокрывая это, но я уверен, что есть элегантный подход.
К вашему сведению: languageChoiceButton объявлен как:
var languageChoiceButton = UIAlertAction ()
@objc func languageMenu(){
loadLanguages()
let chooseLanguageController = UIAlertController(title: "Vocabulary Tutor", message: "Choose a Language", preferredStyle: .actionSheet)
let addLanguage = UIAlertAction(title: "Add Language", style: .default, handler: { (action) -> Void in
let ac = UIAlertController(title: "Add a language", message: nil, preferredStyle: .alert)
ac.addTextField { textField in
textField.placeholder = "New language"
}
let submitAction = UIAlertAction(title: "Add", style: .default) { [unowned self, ac] (action: UIAlertAction!) in
self.newLanguage = ac.textFields?[0].text ?? ""
print("newLanguage: \(self.newLanguage)")
self.languages.append(self.newLanguage)
self.saveLanguages()
self.loadLanguages()
}
ac.addAction(submitAction)
ac.addAction(UIAlertAction(title: "Cancel", style: .cancel))
self.present(ac, animated: true)
})
chooseLanguageController.addAction(addLanguage)
for language in languages {
languageChoiceButton = UIAlertAction(title: language.capitalized, style: .default, handler: { (action) -> Void in
self.chosenLanguage = language
self.title = self.chosenLanguage.capitalized
print("Chosen language is: \(self.chosenLanguage)")
self.loadInitialValues()
chooseLanguageController.addAction(self.languageChoiceButton)
})
}
let cancel = UIAlertAction(title: "Cancel", style: .cancel) {
(action:UIAlertAction!) in
print("Cancel button tapped")
}
chooseLanguageController.addAction(cancel)
self.navigationController!.present(chooseLanguageController, animated: true, completion: nil)
}