0

大家好!我对 xcode 和 Objective-c 很陌生,但我已经用 C# 编程很长时间了。我刚开始使用 Xcode,我的任务是制作一个应用程序,我迷路了!

我有 5 个 UILabel 和一个包含 5 个值的数组,我希望 UILabel 从数组中随机加载一个值,直到使用数组中的所有值。

我可以制作动态标签,但是让它们正确排列很痛苦,如果需要我会这样做,但我不确定如何使用objective-c(在C#中很容易)来做到这一点。

谢谢!

4

2 回答 2

4

据我所知,你有一个数组,想要 5 个字符串,然后想在标签中随机显示?我认为你可以这样做:

-(void)fillLabel {

int random = arc4random() % 5; //random value from 0-4
yourLabel.text = [NSString stringWithFormat:@"%@",[yourArray objectAtIndex:random]];

}

你可以用

[自填标签];

如果你在同一个班。

于 2012-07-30T15:42:18.097 回答
1

嘿,欢迎来到 SO,这是帮助您学习 XCode 和 Objective-C 的好地方。

有几种方法可以做到这一点,所以我只给你一个示例解决方案。

您实际上可以在您的 NIB(.xib) 文件中创建标签,然后将它们链接到代码中的变量,这样您就可以轻松访问它们而无需以编程方式创建它们。您执行此操作的方式如下:

ViewController.h

@interface ViewController : UIViewController
{
    //Some Variables
}

@property (nonatomic, strong) NSMutableArray *stringValues;

@property (nonatomic, strong) IBOutlet UILabel *randLabel1;
@property (nonatomic, strong) IBOutlet UILabel *randLabel2;
@property (nonatomic, strong) IBOutlet UILabel *randLabel3;
@property (nonatomic, strong) IBOutlet UILabel *randLabel4;
@property (nonatomic, strong) IBOutlet UILabel *randLabel5;

这里的关键是标签被声明为 .h 文件中的 IBOutlets。这允许您然后进入您的 .xib 文件并将您定位的标签链接到代码中的变量。要链接标签,请按住控制键,然后将其拖到视图控制器并释放,您应该会看到一个列出 5 个标签的菜单,然后您可以选择适当的一个。

至于然后选择一个随机字符串加载到标签中,您可以通过以下方式进行。

ViewController.m 


-(void)selectLabelValue: 
{
    for(int i = 5; i > 0; i--)
    {
        randIdx = arc4random() % i;
        switch (i):
        case 1:
            Label1.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];            
        case 2:
            Label2.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];  
        case 3:
            Label3.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];  
        case 4:
            Label4.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];  
        case 5: 
            Label5.text = [stringValue objectAtIndex:randIdx];
            [stringValue removeObjectAtIndex:randIdx];  
        default:
            NSLog(@"Error, index out of bounds, there is no label for this value!";
}

上面的想法是你遍历你的 5 个标签,当你这样做时,你随机生成一个索引来选择要加载的字符串。加载字符串后,将其从可能的字符串中删除,以免重复。我会仔细检查数组操作的函数名称,因为我是在脑海中完成的,所以我不是 100% 确定它们是正确的,但确实存在一些可以做他们应该做的事情。

无论如何,我希望对您有所帮助,如果您有任何问题,请发表评论,我会尽力回答。

编辑:以防万一有人略读并且没有阅读理查德的评论。他提出了一个有效的观点,即在上面使用 switch 语句是不好的设计,应该使用数组来处理,同时以编程方式创建标签。这样您就可以轻松地通过数组索引选择您想要的标签。这是一种非常清洁的解决方案,并且比上述解决方案更可取。使用开关完成的唯一原因是,您不必通过 user1221399 偏好的代码创建标签,因此请记住这一点。

于 2012-07-30T15:58:29.427 回答