我有一个视图控制器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?
答案 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也会解雇子节点。而不是替代,孩子'自我毁灭'。