Как добавить Action для Stati c TableView Cell tap? - PullRequest
0 голосов
/ 23 марта 2020

как я могу реагировать на нажатия в ячейке? c просмотр таблицы? Есть ли способ связать его с кодом? Я знаю, что могу использовать динамический c один, но разве это невозможно со статическим c одним?

didSelectRowAt не вызывается enter image description here

Код для выбора не работает

class SettingsVC: UITableViewController, UITabBarControllerDelegate {

    // MARK: - View lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("SELECTED") // not get called
    }
}

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Это можно сделать с помощью таблицы Stati c в UIContainerView.

. Вот настройка раскадровки:

enter image description here

и как это выглядит во время выполнения:

enter image description here

При использовании UIContainerView создается embed segue ... и это вызовет prepare вызов, где вы можете установить делегата tableView на себя (при желании).

Вот код:

import UIKit

class EmbedTestViewController: UIViewController, UITableViewDelegate {

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        // When using UIContainerView, prepare for segue will be called on load

        // un-comment this block to use SELF as the delegate
        //  for the tableView in the embedded tableViewController

        //if let vc = segue.destination as? MyStaticTableViewController {
        //  vc.tableView.delegate = self
        //}

    }

    // this will only be called if .delegate is set as shown above
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("didSelectRowAt called in \"Parent\" for indexPath:", indexPath)
    }

}

class MyStaticTableViewController: UITableViewController {

    // this will NOT be called if .delegate is set as the "parent" view controller
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("didSelectRowAt called in \"Table View Controller\" for indexPath:", indexPath)
    }

}

Обратите внимание на комментарии и закомментированные строки кода в prepare fun c в EmbedTestViewController.

Если вы запустите эту с прокомментированными строками, didSelectRowAt будет вызываться в MyStaticTableViewController классе.

Если вы откомментируете эти строки, didSelectRowAt будет вызываться в EmbedTestViewController классе.


РЕДАКТИРОВАТЬ

Вот полный пример: https://github.com/DonMag/ContainerTableView

1 голос
/ 24 марта 2020

Вам необходимо:

  1. Изменить параметры V C, чтобы они были подклассом UITableViewController.
  2. Сделать параметры настройки V C делегатом вашего табличного представления, поскольку tableView(_:didSelectRowAt:) - это метод UITableViewDelegate.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...