我将向每个窗口添加 50 个带有 4 个 UIButtons(带文本)和 1 个 UILabel(也带文本)的窗口。我需要这样做吗?有没有更好的办法?
2 回答
不要浪费时间创建 50 个窗口(如果这是 MacOS 问题)或视图(如果这是 iOS 问题)。哇,那太可怕了。
相反,创建一个具有四个按钮和至少一个标签的单一视图。
然后,您可以从问题和答案列表中为每个项目填充字符串值。您可以将这些问题保存在 plist 文件或 CoreData 数据库或一些可解析的平面文件等中。通过“ IBAction
”方法将四个按钮连接到(游戏?)控制器。
如果可以的话,创建额外的窗口绝不是一个好主意,尤其是在几乎不需要这样做的 iOS 上。您应该创建一个 UIViewController 子类并使其成为您的根视图控制器(这已在单视图应用程序模板中设置)。然后,创建一个 UIView 的子类——我们称之为“MyQuizView”。“MyQuizView”应该有一个自定义初始化程序,它需要五个 NSStrings(一个用于问题,四个用于答案)和一个整数来确定哪个答案是正确的。UIViewController 子类可以实例化其中的 50 个视图,将模型中的值传递给它们,并使其成为主视图的子视图。
编辑:这是 UIView 子类的自定义初始化程序的示例。
- (id) initWithFrame:(CGRect)frame question:(NSString*)ques answers:(NSArray*)ans correctAnswer:(int)correctAns{
self = [super initWithFrame: frame];
if (self) {
self.question = ques;
self.answers = ans;
self.correctAnswerNumber = correctAns;
[self setup];
}
return self;
}
自定义初始化程序以init
. 它设置self
为其超类的指定初始化器的返回值,然后,如果self
不是 nil,它会初始化其状态——通常使用传递的参数来这样做。最后它返回self
。这个假设你有正确的属性并调用一个名为setup
将属性设置为正确的值后,允许您使用它们来创建标签等。或者,您可以获取传入的值并使用它们立即创建标签和按钮,设置目标操作并将它们放置为子视图,这样您就不需要将参数保留为属性。每个按钮都可以被赋予一个数字标签,以便您知道答案是否正确(基于传递给初始化程序的整数,您必须将其存储在某处)。这一切都来自记忆,但希望它是正确的。