ios - 我怎样才能从课程中以编程方式加载故事板?




xib storyboard (5)

我的问题是我正在寻找使用storyboardxib的方法 。 但我无法找到正确的方式来以编程方式加载和显示故事板。 项目是用xib开始开发的,现在很难在故事板中嵌套所有的xib文件。 所以我正在寻找一种在代码中实现它的方式,比如alloc, init, push for viewControllers。 在我的情况下,故事板中只有一个控制器: UITableViewController ,它具有静态单元格,并带有一些我想要显示的内容。 如果有人知道正确的方式与xib和storyboard一起工作而不需要大量的重构,我会很感激任何帮助。


斯威夫特3

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "viewController")
self.navigationController!.pushViewController(vc, animated: true)

斯威夫特2

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController")
self.navigationController!.pushViewController(vc, animated: true)

条件

为视图控制器分配一个Storyboard ID

IB>显示身份检查器>身份>情节串联ID

斯威夫特(遗产)

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") as? UIViewController
self.navigationController!.pushViewController(vc!, animated: true)

编辑:Swift 2在Fred A.的评论中建议


快速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)
     }

}

当您创建新的Storyboard时,只需在StoryboardID上设置相同的名称,并在您的枚举“ StoryBoardName ”中添加Storyboard名称


在属性检查器中给出该视图控制器的标识符,下面的代码适用于我

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
DetailViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
[self.navigationController pushViewController:detailViewController animated:YES];

在故事板中,转到“属性”检查器并设置视图控制器的标识符。 然后,您可以使用以下代码呈现该视图控制器。

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];

迅速
NavigationControllerpushController您可以替换

present(vc, animated:true , completion: nil)






xib