#ios #swift #xcode #uitableview #uitextfield
Вопрос:
Я работаю в табличном представлении и хочу, чтобы пользователь мог нажать кнопку, которая выводит предупреждение с текстовым полем. Они вводят строку в текстовое поле, нажимают enter, и эта строка отображается в таблице в виде строки. Вот мой код для отображения предупреждения и текстового поля при нажатии на значок плюса в правом верхнем углу. Как только я нажимаю его в симуляторе, приложение перестает отвечать на запросы, в текстовом поле нет курсора, и я не могу печатать с помощью имитированной клавиатуры или моей реальной клавиатуры. Вот код и изображение:
@IBAction func addButtonPress(_ sender: UIBarButtonItem) {
var textField = UITextField()
let alert = UIAlertController(title: "Add New Category", message: "", preferredStyle: .alert)
let action = UIAlertAction(title: "Add Category", style: .default) { (action) in
let newCategory = Category(context: self.context)
newCategory.name = textField.text!
self.categoryArray.append(newCategory)
self.saveCategories()
}
alert.addTextField { (alertTextField) in
alertTextField.placeholder = "Create new category"
textField = alertTextField
}
alert.addAction(action)
present(alert, animated: true, completion: nil)
}
Комментарии:
1. Что
var textField
происходит в этой истории?2. Я установил текстовое поле в поле alertTextField в этом закрытии поля addTextField.
3. И я спрашиваю, зачем ты это делаешь. Для меня это не имеет никакого смысла.
4. Я следовал учебнику. Что может быть лучшей альтернативой?
5. Лучшая альтернатива сделать то , о чем я прошу. Какова ваша цель здесь? В предупреждении есть текстовое поле, вам не нужно говорить о другом.
Ответ №1:
Вы можете сделать это вместо этого. В основном он получает значение первого текстового поля в вашем предупреждении.
@IBAction func addButtonPress(_ sender: UIBarButtonItem) {
let alert = UIAlertController(title: "Add New Category", message: "", preferredStyle: .alert)
let action = UIAlertAction(title: "Add Category", style: .default) { (action) in
guard let categoryName = alert.textFields?.first?.text else { return }
let newCategory = Category(context: self.context)
newCategory.name = categoryName
self.categoryArray.append(newCategory)
self.saveCategories()
}
alert.addTextField { alertTextField in
alertTextField.placeholder = "Create new category"
}
alert.addAction(action)
present(alert, animated: true, completion: nil)
}