【问题标题】:iOS Storyboard: Not able to instantiate view controller properlyiOS Storyboard:无法正确实例化视图控制器
【发布时间】:2015-04-10 01:30:59
【问题描述】:

我在实例化自定义视图控制器时确实遇到了麻烦。

This 是我设置的故事板。第三个视图控制器是我要展示的。

这两种方法我都试过了。

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 时正确呈现了另一个自定义视图控制器。为什么它不适用于这个控制器?

非常感谢大家。

【问题讨论】:

    标签: ios swift uiviewcontroller storyboard


    【解决方案1】:

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

    1. 在您的情况下,您需要一个 show 转场,从故事板来看,您似乎已经完成了。

    2.你需要给你的segue一个Identifier,你可以通过选择你的segue并进入属性编辑器来做到这一点。

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

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

    这将导致情节提要实例化您的 SearchViewController 并以您为该 segue 定义的方式呈现它。

    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`.
        }
    }
    

    应该就是这样!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 2016-12-24
      • 2020-05-27
      • 1970-01-01
      相关资源
      最近更新 更多