【问题标题】:Calling custom function inside UIStoryboard-instantiated UIViewController (Swift)在 UIStoryboard 实例化的 UIViewController (Swift) 中调用自定义函数
【发布时间】:2016-01-20 09:45:12
【问题描述】:

我认为最能表达我的问题的方法是首先概述我要完成的工作,然后给出我的实施,然后是我遇到的问题。

目标

我正在尝试在我的 iOS 应用程序中创建一个配置文件页面,该页面可以从 Storyboard 实例化,给定用户 ID,然后从服务器获取所有元数据。

实施

在我的故事板中,我设计了ViewController 并将ImageViewsbuttons 等链接为@IBOutlets。用户(使用应用程序的人)的主页由 Storyboard 实例化,但其余部分由代码推送。为了抓取数据,我有一个函数loadDataForID(ID: Int)

现在,我遇到的问题是 #instantiateViewControllerWithIdentifier(String) 返回一个 UIViewController,我无法将其上载到我的 ProfileViewController,以便调用数据获取函数。

所以,我的下一个想法是手动创建ProfileViewController,调用辅助函数然后推送视图,但后来我遇到了另一个问题:因为所有视图都是@IBOutlets,而这个控制器不是由 Storyboard 实例化,它们都是 nil 引用。

由于我是 iOS 开发的新手,我几乎可以肯定有更好的方法来实现这一点,但我完全陷入了困境;我不知道从这里去哪里。有没有办法解决这些问题,还是我应该以不同的方式做事?

【问题讨论】:

  • 你为什么不把你从instantiateViewControllerWithIdentifier 得到的视图控制器向下转换到ProfileViewController 呢?比如let vc = storyboard?.instantiateViewControllerWithIdentifier("ID") as! ProfileViewController

标签: ios swift uiviewcontroller storyboard xcode-storyboard


【解决方案1】:

您可以将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)

【讨论】:

  • 哇。这绝对是令人尴尬的。我以前试过这个,但我不小心有“!”在 ProfileViewController 之后,而不是在它之前。谢谢!
  • 很高兴为您提供帮助..:)
  • 啊。它修复了无法调用辅助函数的问题,但视图仍然为零。我该如何解决?
  • 你能分享演示项目吗?
  • 你让我朝着正确的方向前进,我相信我目前的问题与我的问题的具体情况无关,所以我会给你答案:向上转型。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
相关资源
最近更新 更多