不能在另一个文件中使用函数
Posted
技术标签:
【中文标题】不能在另一个文件中使用函数【英文标题】:Cant use Functions in one file in another 【发布时间】:2016-06-18 01:42:28 【问题描述】:我创建了一个名为“Util.swift”的文件,它有一个类“类 VC: UIViewController”并有两个函数:
Next(segue: String)
performSegueWithIdentifier(segue, completion: nil)
Back()
dismissViewControllerAnimated(true, completion: nil)
所以基本上,这些函数只是告诉当前的 viewController 去下一个 View 还是回到上一个 View。
但是,在另一个文件中,我有一个附加到按钮的 IBAction,在该操作中,我通过执行以下操作调用 Util 文件中的函数“Back”:
@IBACTION func ~~~
nextVC = Util()
nextVC.back()
但是,当我单击按钮时,它什么也没做。
当我尝试通过执行相同操作并输入 segue indetifier 参数将另一个按钮连接到调用 Util 文件中的“next”函数的操作时,它显示 SIGABRT 错误:没有名为“xxx”的 segue 标识符。
谁能帮帮我?我应该简单地使用 XIB 而不是使用 segues 吗?
【问题讨论】:
你为什么要把这些函数放在另一个类中?找不到 segue 的原因是您只是使用初始化程序而不是从情节提要创建 Util,因此它与情节提要无关。 @Paulw11,您应该充实您的评论并将其发布为答案。 【参考方案1】:您必须使用storyBoard
或XIB
初始化UIViewController
。如果您正在使用工厂 init()
方法,那么它不会为您做任何事情;这意味着,这不是与storyBoard
或XIB
关联的viewController
。因此,您需要做的就是使用任一选项实例化 viewController。在此之前,您需要为viewController
设置一个identifier
来实例化它。
let storyBoard = UIStoryBoard(name: "MainStoryBoard", bundle: nil)
let vc = storyBoard.instanstiateViewControllerWithIdentifier("YOUR_IDENTIFIER") as! Util
//call your Next method like this
vc.Next(segue:"identifier")
请参考文档 Apple Doc
【讨论】:
【参考方案2】:为了使用 segue,视图控制器实例需要与 Storyboard 相关联。为了与故事板关联,视图控制器实例要么需要是 segue 的结果,要么需要通过 instantiateViewControllerWithIdentifier
从故事板实例化。
当您通过Util()
创建Util
的实例时,您有一个与情节提要无关的视图控制器实例,并且实际上并未显示在屏幕上。
因此,当您尝试执行转场时,您会收到错误,因为找不到转场。
此外,当您尝试关闭 back()
中的视图控制器时,您正在尝试关闭未显示的视图控制器。
我不知道你为什么要在 next
和 back
中包装两个相当简单的函数,但是你可以为你的所有视图控制器使用一个超类来做到这一点,并让这个超类实现你的 next
和 @ 987654328@函数:
class MyViewContollerSuperclass: UIViewController
func next(segue: String)
self.performSegueWithIdentifier(segue, sender: self)
func back()
self.dismissViewControllerAnimated(true, completion: nil)
那么你实际的视图控制器将被声明为:
class MyActualViewController: MyViewContollerSuperclass
@IBACTION func ~~~
self.back()
【讨论】:
我有很多情节提要,每个视图上都有“返回”和“下一步”按钮。我不想一遍又一遍地输入“perfromsegue”和“dismissViewController”,所以我创建了“next”和“back”。以上是关于不能在另一个文件中使用函数的主要内容,如果未能解决你的问题,请参考以下文章