Заполнение UIAlertController с помощью UIAlertActions на основе строкового массива - PullRequest
0 голосов
/ 20 марта 2019

У меня есть строковый массив с именем 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)
}
...