Я прочитал Trying to understand protocol/delegates in Swift, Passing data back from view controllers Xcode и Pass data when dismiss modal viewController in swift, пытаясь передать некоторые данные взад и вперед. Я думаю, что я сделал именно то, о чем еще писали сообщения, данные не передаются. Я что-то упускаю, и я понятия не имею, что. Если бы вы могли указать, что это такое, это было бы так здорово. Заранее спасибо :)Использование протоколов для передачи данных
Я также хотел бы упомянуть, что я представил TaskMessageViewController
с использованием модального сегмента. И я хочу отправить данные обратно на мой TaskListViewController
. В настоящее время я использую unwindToSegue
, чтобы вернуться к TaskListViewController
.
В моем Protocols.swift
файл, у меня есть следующий код:
import Foundation
protocol ReceiveMessageDelegate {
func receiveMessageFromTaskMessageViewController (message: String)
}
И в моих декларациях наследство, у меня есть:
class TaskListViewController: UIViewController, ReceiveMessageDelegate
и в моем TaskListViewController.swift
, я писал:
override func viewDidLoad() {
super.viewDidLoad()
let taskMessageViewController = TaskMessageViewController()
taskMessageViewController.delegate = self
}
func receiveMessageFromTaskMessageViewController (message: String) {
print(message)
print("Protocol works!")
}
И в моем TaskMessageViewController.swift
, я написал:
var delegate: ReceiveMessageDelegate?
@IBAction func doneButtonTapped(sender: AnyObject) {
self.delegate?.receiveMessageFromTaskMessageViewController("message from message View Controller")
}
При нажатии на кнопку done
на тренажере, то doneButtonTapped
запускается на выполнение. Однако print("Protocol Works")
никогда не будет выполнен. У кого-нибудь есть предложения?
Как вы представляете диспетчер представлений модально? Если это происходит через segue, вам нужно перехватить целевой элемент управления segue, бросить его как TaskMessageViewController и установить делегат на этом объекте. – Ian
Я представил контроллер вида с помощью segue. Но проблема в том, что я использовал 'unindToSegue', чтобы избавиться от модального представления, и я пытаюсь передать данные из модального представления обратно в мой контроллер представления. – aejhyun