Это можно сделать с помощью таблицы Stati c в UIContainerView
.
. Вот настройка раскадровки:
и как это выглядит во время выполнения:
При использовании 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