在故事板之外创建视图控制器

4

我需要一个小型的教程视频,以便我们的iOS项目可以从多个视图控制器(屏幕)中访问。我不想打破数十个segue来添加这个教程,因为这会导致噩梦。最好的方法是创建一个弹出的视图控制器,它不必添加到故事板中吗?如果是这样,我该怎么做?


你可以创建另一个故事板,并通过编程方式执行PUSH和POP操作。 - IOS Singh
4个回答

3
使用单独的.xib文件来创建你的教程视图控制器。
通过新建文件菜单: enter image description here 然后勾选高亮的框: enter image description here 当需要展示你的视图控制器时,需要从刚创建的nib(xib)文件中初始化它。
let vc = TutorialViewController(nibName: "TutorialViewController", bundle: nil)
present(vc, animated: true)

但是我该如何从不同的视图控制器中调用这个xib文件? - monekypox121
@monekypox121 请查看已编辑的回答。 - Juri Noga
我尝试过这个,但问题是我的TutorialViewController没有继承所有视图控制器自动继承的顶部选项卡控制器。如何做到这一点? - monekypox121

2
您可以使用XIB文件,而无需将其与故事板集成。
按照以下步骤创建单独的XIB(带有Viewcontroller文件)。
创建新文件:Xcode >> 新建 >> 文件

enter image description here

选择 Cocoa Touch Class

enter image description here

提供一个视图控制器名称并启用XIB选项。

enter image description here

现在,打开你的XIB(视图控制器):
var viewController = TestViewController(nibName: "TestViewController", bundle: nil)

 // Present
 self.present(viewController, animated: true) {

 }

 //push
 self.navigationController?.pushViewController(viewController, animated: true)

我建议使用推送导航。它会自动为您的控制器添加导航栏和返回按钮。

但是我该如何从不同的视图控制器中调用这个xib文件? - monekypox121
等一下,我会为您提供完整的解决方案。 - Krunal
每个视图控制器在顶部都有一个菜单栏,其中包含“返回”和“继续”选项,它们都会自动继承这个菜单栏,因为故事板正在使用选项卡视图控制器。但是,我的xib文件是在故事板之外创建的,所以现在它不会继承任何东西。 - monekypox121
你使用什么?present还是push。使用self.navigationController?.pushViewController(viewController, animated: true)。它会自动为你的控制器添加导航栏和返回按钮。 - Krunal
呵呵呵,是的,谢谢,我错过了那个。现在它可以工作了。 - monekypox121
显示剩余2条评论

0

步骤如下:

  1. 选择文件新建Xcode工具栏
  2. 现在选择新建
  3. 然后选择文件
  4. 在iOS>源下选择"Cocoa touch class"
  5. 点击下一步
  6. 输入您想要的"类名"
  7. 选择子类"UIViewController"
  8. 点击同时创建一个"XIB"
  9. 选择语言"Swift"或"Objective c"
  10. 现在点击下一步。
  11. 最后,您已经创建了一个控制器。

0

您也可以在现有的故事板中添加一个新的视图控制器(“场景”),但是不要将任何segue连接到它。然后,当您想要从应用程序的任何位置显示它时,可以执行以下操作:

    if let vc = self.storyboard?.instantiateViewController(withIdentifier: "PopUpTutorial") as? PopUpTutorial {
        self.present(vc, animated: true, completion: nil)
    }

你也可以创建一个额外的Storyboard文件,并在那里构建你的“教程”屏幕。然后你需要更改代码为:

    let sb = UIStoryboard(name: "Tutorial", bundle: nil)
    if let vc = sb.instantiateViewController(withIdentifier: "PopUpTutorial") as? PopUpTutorial {
        self.present(vc, animated: true, completion: nil)
    }

这不必在单独的 xib 文件中完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接