我有 4 个 UI 按钮和一个 UILabel。我想做 4 个单词(来自 plist 文件)随机显示在 4 个按钮上(一个按钮有一个单词)和一个单词显示在标签上(与按钮)。我怎样才能做到这一点?
最佳答案
假设您的 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)];
这个解决方案适用于任意数量的按钮,由于混洗算法(这绝对比检查已经生成的索引更好)保证它是有效的并且由于使用 随机生成没有偏差arc4random_uniform
关于iphone - Plist文件中的"Load"文本并使用它(Xcode),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13673449/