UITextField не отвечает. Поле UITextField, встроенное в предупреждение, не работает

#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)
}