[英]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.