我创建了一个名为" 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吗?
答案 0 :(得分:0)
您必须使用UIViewController
或storyBoard
初始化XIB
。如果你正在使用工厂init()
方法,那么它对你没有任何作用;这意味着,这不是与viewController
或storyBoard
相关联的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()
中的视图控制器时,您试图关闭未显示的视图控制器。
我不确定你为什么要在next
和back
中包含两个相当简单的函数,但你可以使用超类来为所有视图控制器执行此操作,并让这个超类实现你的{ {1}}和next
函数:
back
然后你将实际的视图控制器声明为:
class MyViewContollerSuperclass: UIViewController {
func next(segue: String) {
self.performSegueWithIdentifier(segue, sender: self)
}
func back() {
self.dismissViewControllerAnimated(true, completion: nil)
}
}