首页 > 解决方案 > 在 iOS 上使用多项选择应用程序实施多项问题的建议

问题描述

我正在尝试制作一个锻炼应用程序。

用户创建帐户后,应用程序应提出几个问题,以便为用户提供适当的锻炼计划。

我准备好了我的问题QuestionHandler.sharedInstance.questions每个问题title:String都有choices:[String]

问题可以有不同的选择数

我的问题是,我应该为每个问题制作一个新的视图控制器,还是有一种更简洁的方法?

问这个问题的解释:每个选择都应该有自己的视图,它有两个子视图ImageViewUIButton(想象这是一个带有选择的按钮'我对如何实现这一点感到非常沮丧。

更新:

我需要一种不需要UITableViewController.

像下面的这张图片,但我从应用商店找到的这个应用会根据问题的数量调整它会生成多少个按钮(准确描述我想要的)

在此处输入图像描述

标签: iosswiftswift5

解决方案


您需要定义您有多少“类型”的问题。即你需要多少类型的屏幕来显示你的所有问题。

因此,如果我们以您附加的图像为例,您会看到一个屏幕,其中包含 1. 简单按钮(仅文本) 2. 大图像和自定义按钮排列 3. 精美按钮(带有图标的多个文本选项)

不管总共有多少问题,肯定应该有数量有限的这种“类型”。

您的数据模型需要指定类型,并且问题中答案的数据模型应该能够提供您需要为此特定问题显示的“类型”视图所需的所有信息。

enum QuestionType {
    case simple
    case fancy
    case custom
}

struct Question {
    var questionTitle: String
    var type: QuestionType = .simple
    var choices: [Answer]
    var backgroundImage: UIImage?
}

protocol Answer {
    var answerText: String { get }
}

struct SimpleAnswer: Answer {
    var answerText: String
}

struct FancyAnswer: Answer {
    var answerText: String
    var descriptionText: String
    var icon: UIImage
}

struct CustomAnswer: Answer {
    var answerText: String
    var position: CGPoint
}

当然,根据您遵循的架构类型,您可能应该拆分数据模型以将域细节与 UI 等分开,但上面的代码只是一个示例。

一旦您能够列出这些类型,您基本上需要创建这么多视图控制器,然后您可以创建这些视图控制器并将其添加到页面视图控制器或导航堆栈,然后完成。

我不确定您为什么不想使用表格视图控制器。一旦定义了这些不同的类型,表格视图控制器将非常适合某些情况。


推荐阅读