В этом случае вам понадобится один из следующих двух вариантов:
- Создайте протокол, который будет реализован вашим основным
UIViewController
, чтобы UITableViewController
мог передавать данные через делегат своему родительскому контроллеру представления
- Опубликуйте UINotification в
UITableViewController
и получите это уведомление в виде строки состояния и отобразите данные.
Давайте рассмотрим оба варианта:
Определите протокол, в этом примере я отправляю только String
ячейки, к которой был подключен:
@objc protocol YourDataProtocol {
func didSelectCell(withString string: String)
}
Затем добавьте свойство делегата к вашему UITableViewController
class YourTableViewController: UIViewController {
weak var delegate: YourDataProtocol?
...
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
//call the delegate method with your text - in this case just text from textLabel
if let text = cell?.textLabel?.text {
delegate?.didSelectCell(withString: text)
}
}
}
Сделайте ваш UIViewContoller
делегатом подкласса UITableViewController
:
class YourViewController: UIViewController, YourDataProtocol {
...
let yourTableVC = YourTableViewController(...
yourTableVC.delegate = self
func didSelectCell(withString string: String) {
statusBar.text = string//update the status bar
}
}
Второй вариант с использованием NotificationCenter
В своем UITableViewController
вы публикуете уведомление
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
if let text = cell?.textLabel?.text {
let notificatioName = Notification.Name("DataFromTableViewCell")
NotificationCenter.default.post(name: notificatioName, object: nil, userInfo: ["YourData": text])
}
}
В строке состояния вы начинаете слушать это уведомление
NotificationCenter.default.addObserver(self, selector: #selector(didReceiveData(_:)), name: notificatioName, object: nil)
@objc func didReceiveData(_ notification: Notification) {
if let userData = notification.userInfo, let stringFromCell = userData["YourData"] {
print(stringFromCell)
}
}