быстро, получить измененные данные из tableViewCells, которые имеют CustomCells - PullRequest
0 голосов
/ 09 апреля 2020

Этот вопрос задавался пару раз во многих местах, но его чрезвычайно трудно понять и решить.

Моя проблема другая, и я задаю этот вопрос после более 5 часов.

У меня есть tableView, где у меня есть 3 различных типа CustomCells.

В моих пользовательских ячейках есть 3 вещи, 2 общих метки и текстовое поле. 3-й элемент (шаговый, кнопка, переключатель)

Я динамически разместил 10 ячеек, вызывая

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

Что я хочу сделать в идеале ->

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

Я пытался использовать

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

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

Если я использую элементы пользовательского интерфейса (шаговый переключатель / переключатель), которые находятся в моей пользовательской ячейке, эта часть кода не срабатывает.

I Я видел решения, использующие теги и делегаты, но поскольку я новичок в iOS, я не уверен, как реализовать или go впереди. Я использую курс Анжелы * Udemy iOS, чтобы преподавать сам.

Пользовательская ячейка enter image description here

Общий экран, мне нравится получать значения текстового поля, когда пользователь изменяет их Screenshot of dynamically populated tableview

1 Ответ

0 голосов
/ 09 апреля 2020

(проверено) Здравствуйте, один из способов, с помощью которого я решил эту проблему, - добавить функцию-обработчик вне подкласса, внутри которого вы инициализировали свой tableView.

    //.... This is your cellForRowAt tableView function..
    let cell = self.tableView.dequeueReusableCell(withIdentifier: cellId) as! cellSubclass
    cell.stepperButton.addTarget(self, action: #selector(handleStep(_:)), for: .valueChanged)
    return cell
}

@objc func handleStep(_ sender: UIStepper) {
    print(sender.value)
    let indexPath : IndexPath = IndexPath(item: 0, section: 0) 
    // Put the correct item # to locate where you have the stepper,
    // Then create a separate function doing the same thing, but with the item 
    // number of the next cell where you get the value from the switch
    let cell = tableView.cellForRow(at: indexPath) as! cellSubclass
    cell.textField.text = "\(Int(sender.value))"
}

Вы подключаете UIStepper через метод addTarget внутри функции, в которой вы создаете свои ячейки.

Вот изображение моего результата: enter image description here

Совет: добавьте stepper.minimumValue = 0 Это отключает кнопку [-], когда значение == 0.

...