Swift视图控制器初始化程序问题

时间:2016-04-26 14:08:59

标签: ios swift

我有一个视图控制器A,它在故事板中有一个xib。 然后我从A继承B。

现在我想呈现B的视图控制器。

如果我做的话

private WebView webView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView = (WebView)findViewById(R.id.webView);

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);

    String htmlData = "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" />";

    webView.loadDataWithBaseURL("http://facebook.com", htmlData, "text/html", "UTF-8", null);
}

它实际上正在工作,但没有加载xib。 该应用程序将崩溃说collectionView是零。 假设xib有一个collectionView,在A类中:

self.presentViewaController(B.init(), animated: true)

如何修复此问题,以便在实例化B时,我可以初始化collectionView?

1 个答案:

答案 0 :(得分:1)

您应该实例化并保持对ViewController的引用,如下所示:

var viewController = someViewController(nibName: "SomeViewController", bundle: nil)

然后像这样出现:

self.presentViewController(viewController, animated: true)

你当然可以简单地呈现这样,但它是恶心的

self.presentViewController(someViewController(nibName: "SomeViewController", bundle: nil), animated: true)

您可能需要跟踪或不需要跟踪ViewControllers,但这会带来灵活性。

此外,你应该检查委托模式范例,重要的是提供子ViewController的同一个ViewController也会解雇子节点。而不是替代,孩子'自我毁灭'。