我的问题是我正在寻找使用 storyboard 和 xib 的方法。但我找不到以编程方式加载和显示故事板的正确方法。 Project开始使用xib进行开发,现在很难将所有xib文件嵌套在storyboard中。所以我在代码中寻找一种方法,比如使用alloc, init, push
的viewControllers。在我的情况下,我在故事板中只有一个控制器:UITableViewController
,它有静态单元格,其中包含我想要显示的一些内容。如果有人知道在没有大量重构的情况下使用xib和storyboard工作的正确方法,我将非常感谢您的帮助。
答案 0 :(得分:349)
在故事板中,转到“属性”检查器并设置视图控制器的标识符。然后,您可以使用以下代码显示该视图控制器。
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
答案 1 :(得分:60)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "viewController")
self.navigationController!.pushViewController(vc, animated: true)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController")
self.navigationController!.pushViewController(vc, animated: true)
<强>前提条件强>
将 Storyboard ID 分配给视图控制器。
IB&gt;显示身份检查器&gt;身份&gt;故事板ID
Swift(遗产)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") as? UIViewController
self.navigationController!.pushViewController(vc!, animated: true)
编辑:Fred A.
在评论中建议使用Swift 2如果你想在没有任何navigationController的情况下使用,你必须使用如下:
let Storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = Storyboard.instantiateViewController(withIdentifier: "viewController")
present(vc , animated: true , completion: nil)
答案 2 :(得分:15)
在属性检查器中,为该视图控制器提供标识符,以下代码适用于我
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
DetailViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
[self.navigationController pushViewController:detailViewController animated:YES];
答案 3 :(得分:3)
试试这个
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];
[[UIApplication sharedApplication].keyWindow setRootViewController:vc];
答案 4 :(得分:2)
present(vc, animated:true , completion: nil)
答案 5 :(得分:1)
对于 swift 3和4 ,您可以执行此操作。好的做法是将Storyboard的名称设置为StoryboardID。
enum StoryBoardName{
case second = "SecondViewController"
}
extension UIStoryBoard{
class func load(_ storyboard: StoryBoardName) -> UIViewController{
return UIStoryboard(name: storyboard.rawValue, bundle: nil).instantiateViewController(withIdentifier: storyboard.rawValue)
}
}
然后您可以在ViewController中加载Storyboard,如下所示:
class MyViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
guard let vc = UIStoryboard.load(.second) as? SecondViewController else {return}
self.present(vc, animated: true, completion: nil)
}
}
创建新故事板时,只需在StoryboardID上设置相同名称,并在枚举中添加故事板名称&#34; StoryBoardName &#34;
答案 6 :(得分:0)
您始终可以直接跳到根控制器:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [storyboard instantiateInitialViewController];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
答案 7 :(得分:0)
以下扩展名将允许您加载Storyboard
及其关联的UIViewController
。示例:如果您有一个名为UIViewController
的{{1}}和一个名为“ ModalAlert”的情节提要,例如
ModalAlertViewController
将同时加载let vc: ModalAlertViewController = UIViewController.loadStoryboard("ModalAlert")
和Storyboard
,并且UIViewController
的类型将为vc
。 注意:假定情节提要的情节提要ID与情节提要具有相同的名称,并且该情节提要已标记为是初始视图控制器。
ModalAlertViewController