大家好!我是xcode和objective-c的新手,但我已经用C#编程了很长时间。我刚刚开始使用Xcode,我的任务是创建一个应用程序而且我迷路了!
我有5个UILabel和一个包含5个值的数组,我希望UILabels从数组中随机加载一个值,直到使用数组中的所有值。
我可以制作动态标签,但是如果需要我会做正确的排队是很痛苦的,但我不知道如何使用objective-c(在C#中很容易)。
谢谢!
答案 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的首选项,所以请记住这一点。