繁体   English   中英

iOS Storyboard:无法正确实例化视图控制器

[英]iOS Storyboard: Not able to instantiate view controller properly

我真的很难实例化自定义视图控制器。

是我的故事板设置。 我要介绍的第三个视图控制器。

我已经尝试了这两种方法。

1:这将导致黑屏。

var searchController: SearchController = SearchController()
self.presentViewController(searchController, animated: true, completion: nil)

2:这将弹出白色的空白视图控制器。

let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
let searchController : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("searchController") as! UIViewController
self.presentViewController(searchController, animated: true, completion: nil)

这是实际视图控制器的代码:

class SearchController: UIViewController {

    lazy var searchBar: UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20))

    override func viewDidLoad() {
        super.viewDidLoad()

        var leftItem = (UIBarButtonItem)(customView: searchBar)
        self.title = "Search"
        self.navigationItem.leftBarButtonItem = leftItem
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }    
}

这非常令人困惑,因为在使用上述方法1时正确显示了另一个自定义视图控制器。 为什么它不适用于此控制器?

非常感谢大家。

使用情节提要时,无需使用presentViewController或手动实例化视图控制器。 相反,最好使用segue从一个UIViewController移到下一个。

1.在您的情况下,您需要表演节目 ,看来您已经通过情节提要进行了判断。

在此处输入图片说明

2.您需要给segue一个Identifier ,您可以通过选择segue并转到Attributes Editor来完成

3.要执行segue,只需从第一个视图控制器(而不是presentViewController )调用以下presentViewController

self.performSegueWithIdentifier("YourIdHere", sender: self)

这将使情节SearchViewController实例化您的SearchViewController并以您为该脚本定义的方式显示它。

4.如果要将任何值传递给SearchViewController ,则可以重写UIViewController prepareForSegue 在您的第一个视图控制器中:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let searchViewController = segue.destinationViewController where segue.identifier == "YourIdHere") {
        // Now you can set variables you have access to in `searchViewController`.
    }
}

就是这样!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM