Swift 4,加载下一个ViewController

时间:2018-04-10 07:43:59

标签: ios swift swift4

在我的应用程序中,我在导航控制器中嵌入了两个视图控制器。我希望有一个选项可以从SecondVC获取数据,而只打开FirstVC。所以这就像我不希望用户看到(或至少与SecondVC交互)。

重点是

因此用户只需点击FirstVC上的按钮(之前不打开SecondVC),我就可以访问SecondVC上的数据了。 如何在不打开导航控制器的情况下从导航控制器中的下一个视图控制器(SecondVC)获取数据?或者至少不要让用户与之互动。

现在我唯一的想法是:

  1. 当用户点击按钮时推送segue,将其输入内存,加载数据然后关闭它。但是当视图控制器变化如此之快时,这看起来并不好。

  2. 要在屏幕外模式显示下一个视图控制器,请获取数据并将其关闭。因此用户甚至不会看到另一个视图控制器打开。

  3. 修改

    我需要不仅可以访问方法或smth。我需要到@IBOutlet。 UIView的子类(使用CorePlot)完全是

3 个答案:

答案 0 :(得分:2)

您不应该直接致电loadView()

实例化你的UIViewController,然后调用loadViewIfNeeded()

  

调用此方法从其storyboard文件加载视图控制器的视图,或根据已建立的规则根据需要创建视图。

修改

let storyboard = UIStoryboard(name: "Main", bundle: nil)

// make sure that the value is an optional so that you can unset it later. This one is optional because we use optional casting (with as?)
var vc = storyboard.instantiateViewController(withIdentifier: "secondVC") as? SecondViewController
vc?.loadViewIfNeeded()

// use the vc

// later unset vc variable
vc = nil

答案 1 :(得分:0)

解决方案:

您可以为它创建一个函数,或者只是插入viewDidLoad()等。

不要忘记更改所选视图控制器的StoryboardID(可以在Identity检查器中的storyboard文件中完成)。

    // You need to get to your Storyboard and instantiate the needed View Controller
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    var graphVC = storyboard.instantiateViewController(withIdentifier: "graphVCID") as? graphVC

    // Then call loadViewIfNeeded (don't call loadView()) to load @IBOutlet's etc
    graphVC?.loadViewIfNeeded()

    // My outlets are loaded with data when these functions are called
    graphVC?.viewDidLoad()
    graphVC?.viewWillAppear(false)

    // Unset the reference to VC
    graphVC = nil

答案 2 :(得分:0)

为此,您必须使用' modalPresent'来调用您的2ed View控制器。和2edVC的背景必须清除。然后从2ed VC获取您的数据。没有变化。有关modalPresent的更多信息,请link