簡體   English   中英

如何在沒有prepareForSegue的情況下在Swift文件之間傳遞數據?

[英]How to pass data between Swift files without prepareForSegue?

我目前有三個Swift文件,一個用於ViewController中的主視圖,另外兩個用於第一個視圖中的兩個視圖,用於分段控制。

由於這些不使用彼此之間的segue,我不能使用prepareForSegue方法在它們之間傳輸數據,那么如何將變量等從一個文件傳輸到另一個文件呢?

這似乎並不重復,因為其他案例,如評論的人使用segues,我的不是。

是否所有三個Swift類都查看控制器子類?

您的主視圖控制器具有分段控件。 對於每個分段,我將創建一個新的視圖控制器子類。

在主視圖控制器上,對於每個段,使用“容器視圖”而不是UIView對象。

這將在故事板中創建兩個新的“屏幕”,通過segue連接到主視圖控制器。 這些新屏幕將是UIViewControllers,您可以將它們更改為正常的子類。

您現在可以正常使用prepareForSegue函數在分段控件視圖控制器中設置數據。

所以你有類似viewControllerMain東西,它包含viewSegmentedOneviewSegmentedTwo ,你想能夠訪問`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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM