结合UIWindows?

时间:2012-12-05 20:23:43

标签: objective-c ios macos

我将在每个窗口添加50个窗口,其中包含4个UIButtons(带文本)和1个UILabel(带文本)。我需要这样做吗?还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

相反,创建一个包含四个按钮和至少一个标签的视图。

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

答案 1 :(得分: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的方法,允许您使用它们来创建标签等等。或者,您可以获取传入的值并使用它们立即创建标签和按钮,设置目标操作并将它们作为子视图放置,这样您就不需要将参数保留为属性。每个按钮都可以给出一个数字标签,以便您知道答案是否正确(基于传入初始化程序的整数,您 必须存储在某处)。这完全来自记忆,但希望这是正确的。