xcode数组随机填充标签文本

时间:2012-07-30 14:56:46

标签: objective-c xcode arrays label

大家好!我是xcode和objective-c的新手,但我已经用C#编程了很长时间。我刚刚开始使用Xcode,我的任务是创建一个应用程序而且我迷路了!

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

我可以制作动态标签,但是如果需要我会做正确的排队是很痛苦的,但我不知道如何使用objective-c(在C#中很容易)。

谢谢!

2 个答案:

答案 0 :(得分:4)

根据我的理解,你有一个数组,想要5个字符串,并想在标签中随机显示?我想你可以这样做:

-(void)fillLabel {

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

}

你可以用

来调用它
  

[self fillLabel];

如果你在同一个班级。

答案 1 :(得分: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个标签,并且随机生成索引以选择要加载的字符串。加载字符串后,将其从可能的字符串中删除,以便您不会重复。我会仔细检查数组操作的函数名称,因为我从头顶做了那些,所以我不是百分之百确定它们是正确的,但确实存在它们应该做的事情。

无论如何,我希望有帮助,如果您有任何问题留下评论,我会尽力回答。

编辑:以防万一有人浏览并且没有阅读理查德的评论。他提出了一个有效的观点,即在上面使用switch语句是糟糕的设计,应该使用数组处理,同时以编程方式创建标签。这样,您可以轻松地通过数组索引选择所需的标签。 这是一个非常清晰的解决方案,并且优于上述。使用交换机完成的唯一原因是,这样您就不必通过代码创建标签,而代码是user1221399的首选项,所以请记住这一点。