我有4个UI按钮和一个UILabel。我想在4个按钮上随机显示4个单词(来自plist文件)(一个按钮有一个单词)和标签上显示的一个单词(具有相同的单词名称)按钮)。我怎样才能做到这一点?
答案 0 :(得分:3)
假设您的plist被称为words.plist
并且您的数组为4 UIButtons
NSString * path = [[NSBundle mainBundle] pathForResource:@"words" ofType:@"plist"];
NSMutableArray * words = [NSMutableArray arrayWithContentsOfFile:path];
现在,您在words
数组中拥有所有可能的单词。此时我们需要4个独特的随机索引,这基本上意味着在随机改组之后取出数组的起始4个元素。我们将使用Fisher-Yates shuffle algorithm回答中建议的this。
for (int i = words.count - 1; i > 0; --i) {
int r = arc4random_uniform(i);
[words exchangeObjectAtIndex:i withObjectAtIndex:r];
}
现在我们有一个随机改组的单词,我们只需要前4个元素并将它们分配给按钮。它看起来像是:
for (int j = 0; j < buttons.count; j++) {
UIButton * button = [buttons objectAtIndex:j];
button.titleLabel.text = [words objectAtIndex:j];
}
最后,我们为标签指定一个单词,随机选择我们用于按钮的索引之间的索引:
yourLabel.text = [words objectAtIndex:arc4random_uniform(buttons.count)];
这个解决方案适用于任意数量的按钮,由于混洗算法(肯定比检查已经生成的索引更好),它保证是高效的,并且由于{{1}的使用,随机生成没有偏差}}
答案 1 :(得分:2)
将PLIST文件的内容移动到数组中。
NSArray *words = [[NSArray alloc] initWithContentsOfFile:filePath];
随机找到一个数字。
int randInt = arc4random() % 10;
将10
更改为PLIST中的总字数。
您现在可以从数组中选择随机字。
NSString *random = [words objectAtIndex:randInt];
你有一个随机词。找到另一个随机数(检查以确保它与前一个不同),然后从words
数组中选择下一个单词。