在 iOS 上使用多项选择应用程序实施多项问题的建议
Advice for implementing multiple question with multiple choice app on iOS
我正在尝试制作一个锻炼应用程序。
用户创建帐户后,应用程序应询问几个问题以为用户提供适当的锻炼计划。
我在 QuestionHandler.sharedInstance.questions
中准备好了我的问题,每个问题都有 title:String
和 choices:[String]
问题可以有不同数量的选择
我的问题是,我应该为每个问题制作一个新的视图控制器,还是有更简洁的方法?
问这个问题的解释:每个选择都应该有自己的视图,有两个子视图 ImageView
和 UIButton
(把它想象成一个有选择的按钮'我真的很沮丧如何实现这个。
更新:
我需要一种不需要 UITableViewController
的方法。
如下图所示,但我从应用商店找到的这个应用会根据问题的数量调整生成的按钮数量(准确描述我想要的)
你可以
1 个问题表ViewController,它将列出所有问题。
1 QuestionChoicesTableViewController,它会列出当前问题的所有选项。
(如果这两个 viewcontroller 具有相似的 UI 你可以只使用一个 ViewController 并用一些动画重新加载 table 视图)
1 QuestionChoiceDetailsViewController,它会显示选择的详细信息。
您需要定义您有多少 'types' 个问题。即您需要多少种屏幕来显示您的所有问题。
因此,如果我们以您所附的图像为例,您会看到一个屏幕
1.简单的按钮(只有文字)
2.大图和按钮的自定义排列
3.花哨的按钮(带有图标的多个文本选项)
不管总共有多少问题,这样的问题肯定是有限的'types'。
您的数据模型需要指定类型,问题中答案的数据模型应该能够提供您需要针对此特定问题显示的 'type' 视图所需的所有信息。
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 等分开,但上面的代码只是一个示例。
一旦你能够列出这些类型,你基本上需要创建那么多的视图控制器,然后你可以创建并将这些视图控制器添加到 page view controller 或导航堆栈,并完成。
我不确定您为什么不想使用 table 视图控制器。一旦定义了这些不同的类型,table 视图控制器将非常适合某些情况。
我正在尝试制作一个锻炼应用程序。
用户创建帐户后,应用程序应询问几个问题以为用户提供适当的锻炼计划。
我在 QuestionHandler.sharedInstance.questions
中准备好了我的问题,每个问题都有 title:String
和 choices:[String]
问题可以有不同数量的选择
我的问题是,我应该为每个问题制作一个新的视图控制器,还是有更简洁的方法?
问这个问题的解释:每个选择都应该有自己的视图,有两个子视图 ImageView
和 UIButton
(把它想象成一个有选择的按钮'我真的很沮丧如何实现这个。
更新:
我需要一种不需要 UITableViewController
的方法。
如下图所示,但我从应用商店找到的这个应用会根据问题的数量调整生成的按钮数量(准确描述我想要的)
你可以
1 个问题表ViewController,它将列出所有问题。
1 QuestionChoicesTableViewController,它会列出当前问题的所有选项。 (如果这两个 viewcontroller 具有相似的 UI 你可以只使用一个 ViewController 并用一些动画重新加载 table 视图)
1 QuestionChoiceDetailsViewController,它会显示选择的详细信息。
您需要定义您有多少 'types' 个问题。即您需要多少种屏幕来显示您的所有问题。
因此,如果我们以您所附的图像为例,您会看到一个屏幕 1.简单的按钮(只有文字) 2.大图和按钮的自定义排列 3.花哨的按钮(带有图标的多个文本选项)
不管总共有多少问题,这样的问题肯定是有限的'types'。
您的数据模型需要指定类型,问题中答案的数据模型应该能够提供您需要针对此特定问题显示的 'type' 视图所需的所有信息。
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 等分开,但上面的代码只是一个示例。
一旦你能够列出这些类型,你基本上需要创建那么多的视图控制器,然后你可以创建并将这些视图控制器添加到 page view controller 或导航堆栈,并完成。
我不确定您为什么不想使用 table 视图控制器。一旦定义了这些不同的类型,table 视图控制器将非常适合某些情况。