0

我将向每个窗口添加 50 个带有 4 个 UIButtons(带文本)和 1 个 UILabel(也带文本)的窗口。我需要这样做吗?有没有更好的办法?

4

2 回答 2

1

不要浪费时间创建 50 个窗口(如果这是 MacOS 问题)或视图(如果这是 iOS 问题)。哇,那太可怕了。

相反,创建一个具有四个按钮和至少一个标签的单一视图。

然后,您可以从问题和答案列表中为每个项目填充字符串值。您可以将这些问题保存在 plist 文件或 CoreData 数据库或一些可解析的平面文件等中。通过“ IBAction”方法将四个按钮连接到(游戏?)控制器。

于 2012-12-05T20:59:10.893 回答
1

如果可以的话,创建额外的窗口绝不是一个好主意,尤其是在几乎不需要这样做的 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将属性设置为正确的值后,允许您使用它们来创建标签等。或者,您可以获取传入的值并使用它们立即创建标签和按钮,设置目标操作并将它们放置为子视图,这样您就不需要将参数保留为属性。每个按钮都可以被赋予一个数字标签,以便您知道答案是否正确(基于传递给初始化程序的整数,您必须其存储在某处)。这一切都来自记忆,但希望它是正确的。

于 2012-12-05T21:00:16.250 回答