首页 > 解决方案 > 将值从子视图页面快速传递到 Pageview 控制器

问题描述

我是 android 开发人员,对 iOS 很陌生。

我有一个 pageView Controller 说 A。它连接到三个子 View Controller。我想从子视图控制器取回一个值回到根页面视图控制器。在android中,它可以通过接口传递很容易地完成,而在iOS中使用协议时会遇到麻烦。

我正在这样做

protocol Z { 
func runZ()
}


Class A: UIViewController, Z {


func runZ( withValue value: String)
{
//Perform some function
}


 var orderedViewControllers: [UIViewController] = {
    var myViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "myViewController") as! MyViewController
    myViewController.z  = self
    return [ myViewController,
             UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "C")]
}()
}


Class B : UIViewController{
var z = A.self
func sendBackToA(){
(z as! Z).runZ(withValue : "CustomString")
}

我在 myViewController.z = self 处收到错误,因为无法将类型“(A)->()-> A”的值分配给类型“A.Type”。

我通过像这样初始化使它以某种方式工作

myViewController.z = A.self

但我的应用程序崩溃了

无法将类型“A.Type”(0x1e0d854d8)的值转换为“Z”

标签: iosswiftuipageviewcontroller

解决方案


protocol Z:class {
  func runZ(withValue value: String?)
}


class A: UIViewController, Z, UINavigationControllerDelegate {



func runZ(withValue value: String?)
{
//Perform some function
}


 var orderedViewControllers: [UIViewController] = {
    var myViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "B") as! B
    myViewController.z = self
    return [ myViewController,
             UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "C")]
}()
}
   

class B : UIViewController{
    weak var z:Z?
   func sendBackToA(){
    z?.runZ(withValue : "CustomString")
   }
}

推荐阅读