在 UIStoryboard 实例化的 UIViewController 中调用自定义函数 (Swift)
Calling custom function inside UIStoryboard-instantiated UIViewController (Swift)
我认为我的问题最好的表达方式是首先概述我要完成的工作,然后给出我的实现,然后是我 运行 遇到的问题。
目标
我正在尝试在我的 iOS 应用程序中创建一个个人资料页面,该页面可以从情节提要中实例化,给定用户 ID,然后从服务器获取所有元数据。
实施
在我的故事板中,我设计了 ViewController
并将 ImageViews
、buttons
等链接为 @IBOutlets
。用户(使用该应用程序的人)的主页由 Storyboard 实例化,但其余部分由代码推送。为了抓取数据,我有一个函数loadDataForID(ID: Int)
现在,我遇到的问题是 #instantiateViewControllerWithIdentifier(String)
returns 一个 UIViewController
我无法向上转换到我的 ProfileViewController
,以便调用数据获取函数。
所以,我的下一个想法是手动创建 ProfileViewController
,调用辅助函数,然后推送视图,但随后我 运行 陷入另一个问题:因为所有视图都是 @IBOutlets
,并且这个控制器没有被 Storyboard 实例化,它们都是 nil 引用。
由于我是 iOS 开发的新手,我几乎可以肯定有更好的方法来实现它,但我完全被卡住了;我不知道从这里去哪里。是否有解决这些问题的方法,或者我应该以不同的方式做事?
您可以将 instantiateViewControllerWithIdentifier(String)
转换为 ProfileViewController
,如下面的代码所示:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let profileVC = storyboard.instantiateViewControllerWithIdentifier("ProfileViewControllerID") as! ProfileViewController
//Now you can access property of ProfileViewController here
self.presentViewController(profileVC, animated: true, completion: nil)
我认为我的问题最好的表达方式是首先概述我要完成的工作,然后给出我的实现,然后是我 运行 遇到的问题。
目标
我正在尝试在我的 iOS 应用程序中创建一个个人资料页面,该页面可以从情节提要中实例化,给定用户 ID,然后从服务器获取所有元数据。
实施
在我的故事板中,我设计了 ViewController
并将 ImageViews
、buttons
等链接为 @IBOutlets
。用户(使用该应用程序的人)的主页由 Storyboard 实例化,但其余部分由代码推送。为了抓取数据,我有一个函数loadDataForID(ID: Int)
现在,我遇到的问题是 #instantiateViewControllerWithIdentifier(String)
returns 一个 UIViewController
我无法向上转换到我的 ProfileViewController
,以便调用数据获取函数。
所以,我的下一个想法是手动创建 ProfileViewController
,调用辅助函数,然后推送视图,但随后我 运行 陷入另一个问题:因为所有视图都是 @IBOutlets
,并且这个控制器没有被 Storyboard 实例化,它们都是 nil 引用。
由于我是 iOS 开发的新手,我几乎可以肯定有更好的方法来实现它,但我完全被卡住了;我不知道从这里去哪里。是否有解决这些问题的方法,或者我应该以不同的方式做事?
您可以将 instantiateViewControllerWithIdentifier(String)
转换为 ProfileViewController
,如下面的代码所示:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let profileVC = storyboard.instantiateViewControllerWithIdentifier("ProfileViewControllerID") as! ProfileViewController
//Now you can access property of ProfileViewController here
self.presentViewController(profileVC, animated: true, completion: nil)