Как я могу держать клавиатуру включенной при касании ячеек tableview? - PullRequest
0 голосов
/ 19 июня 2020

Я новичок изучаю Swift и пытаюсь создать страницу поиска с помощью Swift. На моей странице поиска приложения я добавил два представления в свою раскадровку, при этом одно представление расположено над другим.

  • Верхнее представление содержит представление коллекции, где у меня есть два прототипа ячеек представления коллекции. Первый тип ячеек - Label. Второй тип ячеек имеет TextField.
  • Другой вид в нижней половине экрана содержит динамическое c табличное представление, в котором у меня есть список элементов, которые можно выбрать. Каждая строка ячеек табличного представления имеет элемент выбора.

Итак, когда я нажимаю на ячейку представления таблицы, элемент выбора появляется в представлении коллекции. Если я ввожу ключевое слово в поле TextField в представлении коллекции, представление таблицы перезагружается и показывает все элементы выбора, содержащие ключевое слово, поэтому я могу нажать и добавить элемент в представление коллекции.

Я хотел бы продолжить добавление путем ввода ключевого слова после нажатия на искомый элемент в представлении таблицы. Итак, я сделал первую ячейку, показывающую выбранные элементы с метками, и вторую ячейку, в которой TextField разделен на две части представления коллекции. Итак, я перезагружаю только первый раздел (без TextField) для каждого выбора. Но каким-то образом клавиатура автоматически отключается всякий раз, когда я нажимаю на ячейку представления таблицы, чтобы добавить элемент в представление коллекции.

Есть ли способ удержать клавиатуру, даже когда я нажимаю на ячейки представления таблицы?

Клавиатура также отключается, когда я нажимаю на ячейки представления коллекции.

Буду признателен за ваш совет. Спасибо.

1 Ответ

0 голосов
/ 19 июня 2020

Надеюсь, у вас хороший день.

Вы можете попробовать вызвать этот метод в UITextField, для которого вы хотите показать клавиатуру (возможно, вызовите его после того, как пользователь коснется UITableViewCell):

textField.becomeFirstResponder()

, где «textField» - это имя переменной вашего UITextField.

Сообщите мне, решило ли это вашу проблему.


Edit # 1

Здравствуйте! Поскольку мое предыдущее решение не привело к желаемому поведению. На мой взгляд, есть еще одно решение, но я не пробовал его раньше.

В качестве введения в концепцию делегирования, есть метод, созданный Apple под названием «textFieldShouldEndEditing», который является вызывается Apple всякий раз, когда любая клавиатура исчезает в любом текстовом поле.

Этот метод создан Apple, но вы можете переопределить его ( т.е. настроить его ) в соответствии с вашими потребностями и адаптировать его поведение.

  1. Чтобы переопределить этот метод, вы должны назначить свой класс в качестве делегата UITextField, добавив UITextFieldDelegate в определение вашего класса следующим образом:
class YourClassName: UIViewController, UITextFieldDelegate { }

Теперь вы должны установить свой класс в качестве делегата, сказав textField.delegate = self Для каждого UITextField, который вы создаете в представлениях вашей коллекции

Затем вы могут воссоздать метод, который мы обсуждали ранее, в вашем классе:

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    //let's implement it the next steps, but for now, let's return true.
    return true
}

Теперь вместо Apple вызова их версии метода они будут вызывать вашу.

Затем вы можете создать переменную на верхнем уровне вашего класса (я дам вам знать, где это будет полезно позже) и «возможно» назовите ее как:
var isCellBeingClicked = false
Теперь, щелкнув ячейку, сделайте эту переменную истинной, я полагаю, вы используете метод didSelectRowAt (но вы можете использовать любой другой метод, который подходит):
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    [...]
    isCellBeingClicked = true
    [...]
}
Теперь вернемся к нашему индивидуальному методу textFieldShouldEndEditing, упомянутому в шаге 3. Вы можете добавить эту реализацию:
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    //If a cell is being clicked right now, please do not dismiss the keyboard.
    if isCellBeingClicked {
        isCellBeingClicked = false //reset the value otherwise the keyboard will always be there
        return false
    }
    else { return true }
}

Пожалуйста, дайте мне знать, решит ли это вашу проблему.

С уважением

...