Как получить все пользовательские ячейки табличного представления textField и textView за пределами tableView - PullRequest
0 голосов
/ 11 декабря 2018

Я пытался получить доступ к пользовательскому текстовому полю ячейки tableView из-за пределов tableView следующим образом:

for i in 0..<NameCounter {
let indexPath = IndexPath(row: i, section: 0)
guard let cell = sampleTableView.cellForRow(at: indexPath) as? sampleCellView else{
    return
}
if let text = cell.txtName.text, !text.isEmpty {
   let value = text
   print("Getting NameText : \(value)")
}

if let text = cell.txtNote.text, !text.isEmpty {
    let value = text
    print("Getting noteText : \(value)")
}}

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

Если я уберу охрану, как это:

let cell = sampleTableView.cellForRow(at: indexPath) as! sampleCellView

Это произойдет сбой, и некоторые ячейки получат ноль.

Как получить доступ ко всем значениям текстового поля извне tableView и получить всю ячейку (ячейка может не иметь значения nil)?

У меня есть несколько таблиц ViewView, и внутри каждой ячейки tableView я помещаю txtName и txtNote.Я хочу определить, какие txtName и txtNote редактируются, поэтому я могу указать правильную модель.

примечание: txtName - текстовое поле, а txtNote - textView

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Это возвращение

let cell = sampleTableView.cellForRow(at: indexPath) as! sampleCellView

ноль и сбой для любой ячейки, которая не видна из-за того, что ячейки таблицы можно использовать повторно, вам нужно сохранить пользовательский набор для каждой ячейки для модели (массив tableView dataSource), затем получить из него значения

var model = [String]()

// внутри cellForRowAt

    cell.textView.delegate = self

    cell.textView.tag = indexPath.row
}
@objc func textViewDidChange(_ tex: UITextView) {


    model[tex.tag] = tex.text!

}

VC класса: UIViewController, UITextViewDelegate {

0 голосов
/ 11 декабря 2018

Вы не должны полагаться на значения, взятые из меток ячеек, текстовых полей и т. Д.

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

Вы должны хранить view state внутри некоторого массива, и тогда вы можете БЕЗОПАСНО получить любое значение по любому индексу.

Если у вас 1000 ячеек, возможно, только 10-20 будетбыть видимым в любое время, а может быть 40-50 или около того в пуле многоразовых ячеек.Если вы находитесь в строке 100 пути индекса - очевидно, что ячейки после строки 150 пути индекса будут nil.

0 голосов
/ 11 декабря 2018

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

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

За сценой UITableViewCell используется повторно, и только видимые в настоящее время ячейки покажут вам фактические данные, если вы обращаетесь к ним из UITableView.Следовательно, сохранение введенных значений ячейки в некотором массиве / словаре для последующего использования является опцией

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