Ios 如何在多个屏幕的过程中重用视图控制器?

Ios 如何在多个屏幕的过程中重用视图控制器?,ios,swift,Ios,Swift,我正在开发一个类似于聊天的应用程序,它可以问一些问题,用户可以在哪里回答 每个问题都有自己的屏幕,用户回答问题后,会有一个按钮导航到下一个屏幕 所有的屏幕几乎都是一样的。UILabel和输入字段。现在我想知道是否有一种方法可以重用这个视图,所以我不必创建多个完全相同的视图控制器 这可能吗?我应该寻找什么呢?您可以通过以下方式进行: 在重用视图控制器中创建变量: var question: String! 按钮操作需要执行以下步骤: @IBAction func nextQuestionAct

我正在开发一个类似于聊天的应用程序,它可以问一些问题,用户可以在哪里回答

每个问题都有自己的屏幕,用户回答问题后,会有一个按钮导航到下一个屏幕

所有的屏幕几乎都是一样的。UILabel和输入字段。现在我想知道是否有一种方法可以重用这个视图,所以我不必创建多个完全相同的视图控制器


这可能吗?我应该寻找什么呢?

您可以通过以下方式进行:

  • 在重用视图控制器中创建变量:

    var question: String!
    
  • 按钮操作需要执行以下步骤:

    @IBAction func nextQuestionAction() {
        performSegue(withIdentifier: "NextQuestionSegue", sender: nil)
    }
    
  • 在准备阶段,在过渡之前,分配下一个问题:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        super.prepare(for: segue, sender: sender)
        if segue.identifier == "NextQuestionSegue" {
            guard let destinationVC = segue.destination as? ReuseViewController else { return }
            destinationVC.question = "Question goes here"
        }
    }
    

  • 这就是它的工作原理。

    关于我的想象,在PageViewController
    问题视图控制器中有一个屏幕流。因此,您可以使用一个UIViewController
    TitleInputViewController
    来公开UITextViewDelegate的闭包,以及应答提交操作回调和两个属性,一个用于UILabel,一个用于UIField

    • var textFieldDidChangeCallback:(字符串?->Void
      :可用于显示字段验证消息
    • var didSubmitAnswerCallback:(字符串?->Void
      :可用于显示字段验证消息和/或显示下一个/上一个控制器
    • @IBOutlet var titleLabel:UILabel:可用于设置标题文本、字体和文本颜色
    • @IBOutlet var inputField:UITextField:可用于设置标题文本、字体、验证错误消息和文本颜色
    然后让此
    问题视图控制器创建此
    标题的多个实例,并使用这些回调来管理和显示它们。

    确保这是可能的

    您可以通过编程方式实例化ViewController,并将其推送到导航控制器中,或以您想要的方式显示。为此,您可以使用:

    let nextVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "formViewController")
    
    其中,“Main”是故事板的名称,标识符是您在该故事板上为该页面设置的标识符

    现在您有了我们的viewController(将其转换为您的特定类型
    as!FormViewController
    ),您可以根据需要设置属性。(标签的文本或文本字段的代理。)


    如果这些表单的顺序是固定的,那么您还可以在故事板上放置多个VCs,将它们链接在一起,并将它们的类设置为同一个ViewController类。然后将插座连接到该VC中的相同字段

    您可以使用容器视图加载公共viewcontroller