Выполните переход, используя кнопку в пользовательской ячейке и передавая объект - PullRequest
0 голосов
/ 17 мая 2018

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

Мне нужно быть в состоянии получить indexPath в подготовке (для: отправителя :), и я обычно использую tableView.indexPathForSelectedRow, а затем использую строку, чтобы вытащить правую из массива, но, как яс помощью кнопки это невозможно.

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

@IBAction func editButtonTapped(_sender: UIButton) {
    let point = sender.convert(CGPoint.zero to self.tableView)
    buttonIndexPath = self.tableView.indexPathForRow(at: point)
    preformSegue(withIdentifier: "showDetails", sender: sender)
}

, и мой код подготовки (для: отправителя :) выглядит следующим образом

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetails" {
        let destination = segue.destination as! MedicineDetailTableViewController
        let selectedMedicine = medicines[(buttonIndexPath?.row)!]
        destination.medicine = selectedMedicine
    }
}

Я извиняюсь, еслиэто что-то глупое, что я скучаю, но я в конце остроумия.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

В этом случае я выполняю следующие действия:

1) Добавьте «кнопку редактирования» в UITableViewCell и создайте IBOutlet.

class YourTableViewCell: UITableViewCell {
    @IBOutlet weak var yourEditButton: UIButton!
}

2) В вашем методе cellForRowAtIndexPath назначьте тег кнопки в качестве индекса.

 cell.yourEditButton.tag = indexPath.row

3) Создайте IBAction в вашем контроллере вида.Откройте раскадровку и соедините «свою кнопку редактирования» с этой функцией IBAction.

class YourViewController: UIViewController {

    let selectedMedicine: Medicine? //your global Medicine variable

    @IBAction func editButtonTapped(_sender: UIButton) {
        //now you can access selected row via sender.tag

        selectedMedicine = medicines[sender.tag]
        preformSegue(withIdentifier: "showDetails", sender: nil)
    }
 }

Наконец:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetails" {
        let destination = segue.destination as! MedicineDetailTableViewController
        destination.medicine = selectedMedicine
    }
}
0 голосов
/ 17 мая 2018

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

func buttonTapped(_ sender: UITableViewCell)

Тогда Вы можете использовать отправителя, чтобы получить IndexPath с indexPath(for:) на tableView и выполнить переход.

Тогда Ваш tableView(_:cellForRowAt:) может выглядеть так:

tableView(_:cellForRowAt:){
   //setup other stuff and dequeue cell
   cell.delegate = self
   return cell

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