Как получить didselectrowat из пользовательской ячейки с текстовыми полями? - PullRequest
1 голос
/ 11 июня 2019

У меня есть динамическое табличное представление с 3 (ячейка1, ячейка2, ячейка3) пользовательскими ячейками, которое используется повторно от 0 до 9 раз. (Максимальное количество ячеек в табличном представлении будет 27 ячеек).

Каждая из этих 3 пользовательских ячеек имеет 3 текстовых поля в каждом, и, кроме того, вторая ячейка имеет 2 кнопки для выбора пола, а 3-я пользовательская ячейка имеет раскрывающееся меню, в котором есть значения, введенные в первом текстовом поле ячеек ячейки 1. .

Теперь проблема в том, что текстовое поле принимает сенсорный ввод от пользователя (как и должно быть), и didselectrowat никогда не вызывается, и поэтому я не получаю indexPath. Но мне нужен indexPath, чтобы я мог вставлять пользовательские данные из каждой из этих ячеек в массив.

(anArray.insert("", at: indexPath)

Так как я не получаю indexPath, все терпит неудачу. Как я могу получить indexPath и получить прикосновение к текстовому полю?

Я имею в виду что-то вроде функции, которая берет прикосновение, получает indexPath и затем передает управление в текстовое поле.

То, что я пробовал.

Я отключил текстовые поля до того, как пользователь коснулся ячейки (и сделал текстовые поля отключенными, как только пользователь отменил выбор ячейки, поэтому ячейка берет касание. Как только didselectrowat вызывается, сделайте текстовое поле активным снова и сделайте

textbox.becomeFirstResponder()

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

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

Также есть хороший способ сделать это? За исключением того, что пользователь дважды щелкает по ячейке / щелкает вне текстового поля.

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Вы можете установить свою пользовательскую ячейку как delegate для UITextField и использовать обратный вызов для редактирования, который начинается / заканчивается, как показано ниже,

class MyCustomCell: UITableViewCell, UITextFieldDelegate {

    public var editCallback: (() -> Void)?

    /// Set 'textField.delegate = self' on initialization.

    func textFieldDidBeginEditing(_ textField: UITextField) {
         self.editCallback?()
    }
}

И использовать обратный вызов в cellForRowAt как,

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = MyCustomCell()
    cell.editCallback = { [weak self] in
        print(indexPath)
    }
    return cell
}
0 голосов
/ 11 июня 2019

Вы можете попробовать это

public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

       tableView.deselectRow(at: indexPath, animated: false)



        //your code here

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...