不能在另一个文件中使用函数

时间:2016-06-18 01:42:28

标签: ios iphone xcode swift uiviewcontroller

我创建了一个名为" Util.swift"的文件。它有一个类"类VC:UIViewController"并具有2个功能:

Next(segue: String) {
    performSegueWithIdentifier(segue, completion: nil)
}

Back() {
    dismissViewControllerAnimated(true, completion: nil)
}

基本上,这些函数只是告诉当前的viewController转到下一个View或返回上一个视图。

然而,在另一个文件中,我有一个附加到按钮的IBAction,在该动作中我调用了函数" Back"在Util文件中执行此操作:

@IBACTION func ~~~ {
    nextVC = Util()
    nextVC.back()
}

但是,当我点击按钮时,它没有做任何事情。

当我尝试将另一个按钮连接到一个调用" next"通过做同样的事情并输入segue indetifier参数在Util文件中起作用,它表示SIGABRT错误:没有名为" xxx"的segue标识符。

任何人都可以帮助我吗?我应该只使用XIB而不使用segues吗?

2 个答案:

答案 0 :(得分:0)

您必须使用UIViewControllerstoryBoard初始化XIB。如果你正在使用工厂init()方法,那么它对你没有任何作用;这意味着,这不是与viewControllerstoryBoard相关联的XIB。所以你需要做的就是用任一选项实例化viewController。在此之前,您需要为identifier设置viewController来实例化它。

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

答案 1 :(得分:0)

为了使用segues,视图控制器实例需要与Storyboard相关联。为了与故事板相关联,视图控制器实例需要是segue的结果,或者通过instantiateViewControllerWithIdentifier从故事板中实例化。

当您通过Util创建Util()的实例时,您有一个与故事板无关的视图控制器实例,并且实际上并未在屏幕上显示。

因此,当您尝试执行segue时,由于找不到segue,您会收到错误。

此外,当您尝试关闭back()中的视图控制器时,您试图关闭未显示的视图控制器。

我不确定你为什么要在nextback中包含两个相当简单的函数,但你可以使用超类来为所有视图控制器执行此操作,并让这个超类实现你的{ {1}}和next函数:

back

然后你将实际的视图控制器声明为:

class MyViewContollerSuperclass: UIViewController {

    func next(segue: String) {
        self.performSegueWithIdentifier(segue, sender: self)
    }

    func back() {
        self.dismissViewControllerAnimated(true, completion: nil)
    }
}
相关问题