ios - 将值从子视图页面快速传递到 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”
解决方案
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")
}
}
推荐阅读
- javascript - vue-i18n如何缩写货币显示?
- automated-tests - 尝试测试 Windows 计算器应用程序后,UFT 14.03 未生成脚本
- php - 在同一台服务器上具有负载平衡 Nodejs 后端的 PHP
- javascript - Meteor Http 客户端 API 调用 Gzip 解压缩结果 JSON 不起作用
- include - 使用 yocto bitbake 包含路径
- java - 在使用 Android 的 android MZ320 中使用 cpcl 将图像和文本打印到收据
- sql-server - 使用 SQL Server 从 BLOB 数据创建文件
- android - 找不到 play-services-auth-base-license.aar - Ionic android 构建失败
- spring - 使用 tomcat embed 作为 Hikari 的数据源?
- javascript - 如何“复制” Safari 浏览器历史记录后退按钮行为(_blank,关闭选项卡)