大家好!我对 xcode 和 Objective-c 很陌生,但我已经用 C# 编程很长时间了。我刚开始使用 Xcode,我的任务是制作一个应用程序,我迷路了!
我有 5 个 UILabel 和一个包含 5 个值的数组,我希望 UILabel 从数组中随机加载一个值,直到使用数组中的所有值。
我可以制作动态标签,但是让它们正确排列很痛苦,如果需要我会这样做,但我不确定如何使用objective-c(在C#中很容易)来做到这一点。
谢谢!
大家好!我对 xcode 和 Objective-c 很陌生,但我已经用 C# 编程很长时间了。我刚开始使用 Xcode,我的任务是制作一个应用程序,我迷路了!
我有 5 个 UILabel 和一个包含 5 个值的数组,我希望 UILabel 从数组中随机加载一个值,直到使用数组中的所有值。
我可以制作动态标签,但是让它们正确排列很痛苦,如果需要我会这样做,但我不确定如何使用objective-c(在C#中很容易)来做到这一点。
谢谢!
据我所知,你有一个数组,想要 5 个字符串,然后想在标签中随机显示?我认为你可以这样做:
-(void)fillLabel {
int random = arc4random() % 5; //random value from 0-4
yourLabel.text = [NSString stringWithFormat:@"%@",[yourArray objectAtIndex:random]];
}
你可以用
[自填标签];
如果你在同一个班。
嘿,欢迎来到 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 偏好的代码创建标签,因此请记住这一点。