我目前有三个Swift文件,一个用于ViewController中的主视图,另外两个用于第一个视图中的两个视图,用于分段控件。
由于这些不使用segu,我不能使用prepareForSegue方法在它们之间传输数据,那么如何将变量等从一个文件传输到另一个文件呢?
这似乎并不重复,因为其他案例(如评论的人使用segues,我的不是。)
答案 0 :(得分:2)
是否所有三个Swift类都查看控制器子类?
您的主视图控制器具有分段控件。对于每个分段,我将创建一个新的视图控制器子类。
在主视图控制器上,对于每个细分,请使用“容器视图”'而不是UIView对象。
这将创建两个新的屏幕'在故事板中,使用segue连接到主视图控制器。这些新屏幕将是UIViewControllers,您可以将它们更改为您的子类正常。
您现在可以正常使用prepareForSegue函数在分段控件视图控制器中设置数据。
答案 1 :(得分:1)
所以你有类似viewControllerMain
的东西,其中包含viewSegmentedOne
和viewSegmentedTwo
,你希望能够访问`viewControllerMain.myProperty'吗?
您始终可以在层次结构中导航以获取父视图 - 但最简单的选项可能是在每个分段控件中包含对viewControllerMain
的引用
var myParentVC : ViewControllerMain?
然后在您创建子视图时
mySubView.myParentVC = self
答案 2 :(得分:0)
如果您正在为视图控制器使用故事板,请尝试这样:
let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Your_VC_Identifier");
viewController.Your_var = Your_value_to_assign
注意:在ViewController类中定义Your_var
答案 3 :(得分:0)
你只需要创建一个你想要显示的视图控制器的实例,这很容易,比如调用storyboard实例(通常是呈现视图控制器有一个)instantiateViewController(withIdentifier:)
,通过使用你的标识符提供故事板文件。
创建一个,您可以将所需数据传递给视图控制器类,并根据需要显示它。
答案 4 :(得分:0)
一种方法是使用单例类。 https://cocoacasts.com/what-is-a-singleton-and-how-to-create-one-in-swift/这就是你如何制作单身人士课程。
其他方法可能是使用nsuserdefaults。
您需要根据您的要求确定哪种方法最佳。
答案 5 :(得分:0)
试试这个:
let defaults = UserDefaults.standard()
defaults.set(yourdata, forKey: "someObject")
print(defaults.object(forKey: "someObject"))
答案 6 :(得分:0)
您可以尝试使用UIViewController的扩展程序
private var storedDataKey: UInt8 = 0
extension UIViewController {
var storedViewControllerData: UIViewController? {
get {
return objc_getAssociatedObject(self, &storedDataKey) as? UIViewController
}
set(newValue) {
objc_setAssociatedObject(self, &storedDataKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_ASSIGN)
}
}
}
这非常有用,您可以使用链式发送数据:
viewControllerB.storedViewControllerData = viewControllerA.storedViewControllerData
或
func viewDidLoad() {
doSomething(self.storedViewControllerData)
}