簡體   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