Я следовал инструкциям here, но я все еще не уверен в этой части:Как передать данные из модального контроллера представления обратно, когда уволенный
modalVC.delegate=self;
self.presentViewController(modalVC, animated: true, completion: nil)
Я попытался инстанцирование контроллера представления программно, но все еще нет.
вот мой код, когда отклоняя модальный контроллер представления:
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
self.dismiss(animated: true) {
//
}
}
Я использую раскадровку для модальных с непосредственно перейти зрения.
Это данные, которые я хотел бы передать обратно в контроллер родительского вида:
var typeState = "top"
var categoryState = "casual"
Какие два значения строк.
Edit:
Я пытался передать данные из модальный контроллер представления, как показано:
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
self.dismiss(animated: true, completion: nil)
delegate?.sendValue(value: "success")
if let presenter = presentingViewController as? OOTDListViewController {
presenter.receivedValue = "test"
}
}
в то время как на контроллере родительского вида я сделал так:
func sendValue(value: NSString) {
receivedValue = value as String
}
@IBAction func printReceivedValue(_ sender: UIButton) {
print(receivedValue)
}
Я все равно не получаю никакого значения, когда нажимаю кнопку печати.
модальный контроллер представления:
protocol ModalViewControllerDelegate
{
func sendData(typeState: String, categoryState: String)
}
var delegate:ModalViewControllerDelegate!
var typeState = "top"
var categoryState = "casual"
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
self.dismiss(animated: true, completion: nil)
delegate?.sendData(typeState: typeState as String, categoryState: categoryState as String)
}
Родитель-контроллер:
class parentViewController: UICollectionViewController, ModalViewControllerDelegate {
var typeState: String?
var categoryState: String?
func sendData(typeState: String, categoryState: String) {
self.typeState = typeState as String
self.categoryState = categoryState as String
}
@IBAction func printReceivedValue(_ sender: UIButton) {
print(typeState)
}
Edit:
Вот мой новый код без использования метода делегата:
модальный вид контроллера:
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
self.dismiss(animated: true, completion: nil)
if let presenter = presentingViewController as? OOTDListViewController {
presenter.typeState = typeState
presenter.categoryState = categoryState
}
}
OOTDListViewController:
@IBAction func presentModalView(_ sender: UIBarButtonItem) {
let modalView = storyboard?.instantiateViewController(withIdentifier: "filterViewController") as! ModalViewController
let navModalView: UINavigationController = UINavigationController(rootViewController: modalView)
self.present(navModalView, animated: true, completion: nil)
}
@IBAction func printValue(_ sender: UIButton) {
print(typeState)
print(categoryState)
}
Вы представляете viewcontroller с помощью segue или кода? – smeshko
Я представляю модальный просмотр с раскадрой segue – Wilson
печать все еще вернула нуль или пустой ответ – Wilson