我试图弄清楚如何浏览我的应用。但我有点失落。
我有一个UIViewController,它可以加载一些数据,然后在CollectionView中显示数据。然后我有另一个UIViewController用于详细视图。然后我触发一个segue转到它,我传递数据等。
self.performSegueWithIdentifier("detailViewSeque", sender: nil)
但我迷失的部分是回到我的主视图,如果我只是触发另一个segue,那么它会再次加载所有数据/视图。数据已经加载一次,我真的不想继续加载它。
我觉得我做错了,这是处理这种情况的一种非常明显的方法。
有人能指出我正确的方向吗?
答案 0 :(得分:3)
这是使用展开segue 的好方法(更多信息:What are Unwind segues for and how do you use them?)。以下是如何设置一个:
首先,在视图控制器中创建一个@IBAction
,以便将转换为,它将UIStoryboardSegue
作为唯一参数。例如:
@IBAction func unwindToHere(segue: UIStoryboardSegue) {
// If you need you have access to the previous view controller
// through the segue object.
}
其次,您需要在IB中创建展开segue。要执行此操作,请从视图控制器中拖动从,再到退出,然后选择unwindToHere
方法:
第三,你需要提供你的segue和标识符。要做到这一点,选择你的segue(见下文 - 你的segue将不会像正常的segue一样可见);然后使用属性编辑器为您的segue提供标识符。
现在你可以使用你的segue了。在想要转换的视图控制器上,调用:
self.performSegueWithIdentifier("YourID", sender: self)
答案 1 :(得分:1)
重新考虑您的需求"我需要在某个与视图控制器关联的地方保留数据"
这里有几个选项。你的目标基本上是将它存储在一个不会内存不足的地方。
AppDelegate
很多用于此目的,但Singleton变量也可以使用。
我个人会创建一个单身,用
说CatPictureRetriever
private let _CatPictureRetriever SharedInstance = CatPictureRetriever()
class CatPictureRetriever {
static let sharedInstance = CatPictureRetriever()
var catPictures : NSArray?;
func gimmeCatPictures -> NSArray? {
return catPictures
}
}
现在,您可以通过CatPictureRetriever随时随地获取照片
var pictures = CatPictureRetriever.sharedInstance.gimmeCatPictures()