[英]how pass data on prepareForSegue function differently? swift 5
[英]How to pass data between Swift files without prepareForSegue?
我目前有三個Swift文件,一個用於ViewController中的主視圖,另外兩個用於第一個視圖中的兩個視圖,用於分段控制。
由於這些不使用彼此之間的segue,我不能使用prepareForSegue方法在它們之間傳輸數據,那么如何將變量等從一個文件傳輸到另一個文件呢?
這似乎並不重復,因為其他案例,如評論的人使用segues,我的不是。
是否所有三個Swift類都查看控制器子類?
您的主視圖控制器具有分段控件。 對於每個分段,我將創建一個新的視圖控制器子類。
在主視圖控制器上,對於每個段,使用“容器視圖”而不是UIView對象。
這將在故事板中創建兩個新的“屏幕”,通過segue連接到主視圖控制器。 這些新屏幕將是UIViewControllers,您可以將它們更改為正常的子類。
您現在可以正常使用prepareForSegue函數在分段控件視圖控制器中設置數據。
所以你有類似viewControllerMain
東西,它包含viewSegmentedOne
和viewSegmentedTwo
,你想能夠訪問`viewControllerMain.myProperty'嗎?
您始終可以在層次結構中導航以獲取父視圖 - 但最簡單的選項可能是在每個分段控件中包含對viewControllerMain
的引用
var myParentVC : ViewControllerMain?
然后在創建子視圖時
mySubView.myParentVC = self
如果您正在為視圖控制器使用storyboard,請嘗試這樣:
let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Your_VC_Identifier");
viewController.Your_var = Your_value_to_assign
注意:在ViewController類中定義Your_var
你只需要創建一個你想要顯示的視圖控制器的實例,這很容易,例如調用storyboard實例(通常是呈現視圖控制器有一個) instantiateViewController(withIdentifier:)
,通過使用你在故事板文件。
創建一個可以將所需數據傳遞給視圖控制器類並根據需要顯示它。
一種方法是使用單例類。 https://cocoacasts.com/what-is-a-singleton-and-how-to-create-one-in-swift/這就是你如何制作單身課程。
其他方法可能是使用nsuserdefaults。
您需要根據您的要求確定哪種方法最佳。
嘗試這個:
let defaults = UserDefaults.standard()
defaults.set(yourdata, forKey: "someObject")
print(defaults.object(forKey: "someObject"))
您可以嘗試使用UIViewController的Extensions
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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.