не в состоянии выяснить, какого отправителя следует вернуть от ведущегоSwipeActions для подготовки к segue - PullRequest
0 голосов
/ 15 февраля 2020

Извините, я новичок в разработке Swift и IOS, но у меня есть табличное представление с каждым элементом в табличном представлении. Я могу нажать на элемент, чтобы go перейти к экрану редактирования, который определяет информацию в ячейке таблицы. , Я также хотел бы, чтобы leadingSwipeActionsConfigurationForRowAt вызвал кнопку редактирования, которая использует тот же самый способ перехода к экрану редактирования, что и прикосновение к ячейке. Проблема заключается в том, что мой оператор prepare(for segue:) для обработки перехода к файлу продолжает сбой из-за отправителя LeadingSwipeAction. Теперь я действительно озадачен тем, что я должен указать в качестве отправителя в моей ведущей акции. Я пробовал UITableViewCell(), который не смог выполнить это защитное утверждение:

guard let ViewController = segue.destination as? ViewController else { fatalError("Unexpected destination: \(segue.destination)") }

за то, что он UIView (), а затем я попытался отправить taskCellTableViewCell, который является объектом / классом I вызвал отдельную ячейку, но вернул ноль / пустую ячейку, которая не смогла выполнить еще одно защитное утверждение Так что теперь я запутался в том, как получить и отправить фактическую ячейку, на которой было выполнено LeadSwipeAction. Я надеюсь, что кто-нибудь может помочь мне определить правильного отправителя, которого я должен вернуть, чтобы пройти подготовку. Спасибо

Вот код, используемый для leadSwipeAction, и подготовьте:

//leading swipe for editing code
override func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    let edit = UIContextualAction(style: .normal, title: "Edit") { (contextualAction, view, actionPerformed: (Bool) -> ()) in
        self.performSegue(withIdentifier: "showDetail", sender: UITableViewCell())
        actionPerformed(true)

    }

    return UISwipeActionsConfiguration(actions: [edit])
}

    // Get the new view controller using segue.destination.
    // Pass the selected object to the new view controller.
    super.prepare(for: segue, sender: sender)

    switch(segue.identifier ?? "") {

        case "addItem":
        os_log("Adding a new task.", log: OSLog.default, type: .debug)

        case "showDetail":
        guard let ViewController = segue.destination as? ViewController else {
            fatalError("Unexpected destination: \(segue.destination)")
        }

        guard let selectedTaskCell = sender as? taskCellTableViewCell else {
            fatalError("Unexpected sender: \(sender)")
        }

        guard let indexPath = tableView.indexPath(for: selectedTaskCell) else {
            fatalError("The selected cell is not being displayed by the table")
        }

        let selectedTask = tasks[indexPath.row]
        ViewController.Task = selectedTask

        default:
        fatalError("Unexpected Segue Identifier; \(segue.identifier)")

    }
}

он не может попытаться снова использовать сеанс showDetail.

Также здесь находится вставка из полный код проекта pastebin

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Хорошо, после поиска и изменения моего поиска в Google, используя каждое модное слово, которое я могу придумать, я наконец нашел ответ. Чтобы отправителем была текущая ячейка, для которой выполняется LeadingSwipeAction, отправителю необходимо установить значение tableView.cellForRow(at: indexPath), которое принимает tableView, передаваемый в забаву LeadingSwipe c, и получает ячейку из indexPath.

0 голосов
/ 15 февраля 2020

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

...