Как ссылаться на пользовательскую ячейку UITableView внутри другой функции (Swift) - PullRequest
1 голос
/ 16 июня 2019

Я пытаюсь добиться функциональности, аналогичной приложению Apple для напоминаний, в котором табличное представление содержит все напоминания, а кнопка + в конце добавляет новый объект.

Мои объекты хранятся в массиве с именем tempActions, который является источником данных для tableView.

Нажатие «Добавить действие» добавляет новый объект в массив с заголовком «Пустая ячейка». enter image description here

Название UITextView, которое пользователи смогут редактировать, но вот что я не могу понять, как это сделать:

Как мне взять текст из UITextView изэтой конкретной ячейке, добавьте ее в массив с правильным индексом (индекс соответствует indexPath.row), а затем отобразите его в cell.label?

Я думал об использовании метода textViewDidEndEditing, но чтоЯ не знаю, как сделать, это сослаться на правильную ячейку из метода cellForRowAt. * ​​1019 *

Кто-нибудь сможет помочь прояснить это, или я подхожу к нему неправильно?

Воткод для вводаКласс e:

class Step3: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextViewDelegate {

// Outlets
@IBOutlet weak var sectionText: UILabel!
@IBOutlet weak var sectionHeader: UILabel!
@IBOutlet weak var teableViewHeight: NSLayoutConstraint!
@IBOutlet weak var tableview: UITableView!

@IBAction func addAction(_ sender: Any) {

    tempActions.append(Action(title: "Empty Cell", completed: false))

    tableview.reloadData()
    tableview.layoutIfNeeded()
    teableViewHeight.constant = tableview.contentSize.height

    print(tempActions)
}

@IBAction func nextAction(_ sender: Any) {

    let newGoal = Goal(
        title: tempTitle,
        description: tempDescription,
        duration: tempDuration,
        actions: nil,
        completed: false
    )

    newGoal.save()

    performSegue(withIdentifier: "ToHome", sender: nil)
}


func textViewDidEndEditing(_ textView: UITextView) {
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return tempActions.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ActionCell", for: indexPath) as! ActionCell

    cell.label.text = tempActions[indexPath.row].title
    cell.label.textContainerInset = UIEdgeInsets(top: 12, left: 0, bottom: 12, right: 0);
    cell.label.delegate = self

    return cell
}

override func viewDidLoad() {
    super.viewDidLoad()
    tableview.estimatedRowHeight = 40
    tableview.rowHeight = UITableView.automaticDimension
}

}

Заранее спасибо

1 Ответ

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

Если я понимаю - textView находится в ячейке, и вы хотите найти эту ячейку в textViewDidEndEditing.Если суперпредставлением текстового поля является ячейка, вы можете сделать это:

func textViewDidEndEditing(_ textView: UITextView) {
    if let cell = textView.superview as? ActionCell, 
         let indexPath = tableView.indexPath(for: cell) {
      // Now you have the indexPath of the cell
      // update tempActions

           // YOUR CODE HERE

      // Then reloadRows
      tableView.reloadRows(at: [indexPath]), with: .automatic)
    }
}

Еще одна вещь, которую вы можете сделать, это сделать так, чтобы у типа tempAction был уникальный идентификатор, а затем сохранить его в ActionCell - когда выЧтобы найти индекс, найдите идентификатор в массиве tempActions, чтобы найти его индекс.

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