【发布时间】:2017-02-28 19:33:04
【问题描述】:
我已经按照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"
这是两个字符串值。
我尝试从模态视图控制器传递数据,如下所示:
@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)
}
这是我没有使用委托方法的新代码:
模态视图控制器:
@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)
}
【问题讨论】:
-
你是用segue还是代码来展示viewcontroller?
-
我正在展示带有故事板 segue 的模态视图
-
打印仍然返回 nil 或空白答案
-
您需要在关闭viewController之前设置值,否则presentingViewController将始终为nil。因此,将
self.dismiss调用移到dismissViewController函数的末尾。 -
还是不行。它与我启动导航控制器层次结构有什么关系吗?