[英]Instantiate view controller created in storyboard from a storyboard less view controller
[英]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.