在swift中,如何在保留数据的同时将UIViewController转发为子类的子类?

时间:2017-05-03 18:04:11

标签: ios swift uiviewcontroller

目前,我正在处理一个项目并尝试使用此方法从故事板中实例化的视图控制器进行向下转换

let cl = self.storyboard?.instantiateViewController(withIdentifier: "contact_list_view")
let contact_list_controller = cl as? ContactListViewController

目前是的,视图的标识符和视图控制器类型在故事板中设置。然而,我遇到的问题是,一旦它向下倾斜,成员变量就不会持续存在。

现在: ContactListViewController继承自UITableViewController,并继承自UIViewController。在我正在研究的早期项目中是否存在某种关于多重继承的问题,我没有使用单级继承(A到B而不是当前的A到C)来解决这个问题。

@IBAction func switchToContractViewForAdd(_ sender: Any) 
    isAdd_or_edit = true;string = "hello"   
    let contact_view=self.storyboard?.instantiateViewController(withIdentifier:"contact_view")
    self.navigation?.pushViewController(contact_view!, animated: true)
}

override func viewDidLoad() {
    super.viewDidLoad()
    let cl = (self.storyboard?.instantiateViewController(withIdentifier: "contact_list_view"))
    contact_list_controller = cl as? ContactListViewController
    contact_list_controller?.string ?? "default")
}

好吧所以这里是我的代码的片段基本上发生了什么是第一个功能是充当segue过渡来显示" contact_view"。加载联系人视图后,我想访问上一个视图中的一些值" contact_list_view" (为简单起见,我添加了一个名为string的字符串变量,其默认值为" hi"并且在第一个函数调用中我更改它" hello"在执行segue之前)。在尝试向下转换" contact_list_view"当从故事板中检索它时,字符串的值是" hi"再一次。

1 个答案:

答案 0 :(得分:0)

原因(好吧,部分原因)你没有得到"你好"的改变值。是因为:

override func viewDidLoad() {
    super.viewDidLoad()
    let cl = (self.storyboard?.instantiateViewController(withIdentifier: "contact_list_view"))
    contact_list_controller = cl as? ContactListViewController
    contact_list_controller?.string ?? "default")
}
每次调用它时,

instantiateViewController 都会创建一个指定视图控制器的新实例。所以,无论你在该行之后还做了什么,你永远不会得到它您尝试在switchToContractViewForAdd()

中设置的值

相反,您需要研究"在视图控制器之间传递数据" (你可以通过简单的搜索找到不可数的例子和解释)。