0

我有 4 个 UI 按钮和一个 UILabel。我想做 4 个单词(来自 plist 文件)随机显示在 4 个按钮上(一个按钮有一个单词)和一个单词显示在标签上(与按钮上的单词名称相同) . 我怎样才能做到这一点?

4

2 回答 2

3

假设你的 plist 被调用words.plist并且你有一个 4 的数组UIButtons

NSString * path = [[NSBundle mainBundle] pathForResource:@"words" ofType:@"plist"];
NSMutableArray * words = [NSMutableArray arrayWithContentsOfFile:path];

现在你有了words数组中所有可能的单词。此时我们需要 4 个唯一的随机索引,这基本上意味着在随机打乱后取数组的起始 4 个元素。我们将使用答案中建议的Fisher-Yates 洗牌算法。

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

于 2012-12-02T23:29:13.783 回答
2

将 PLIST 文件的内容移动到一个数组中。

NSArray *words = [[NSArray alloc] initWithContentsOfFile:filePath];

随机找一个数。

int randInt = arc4random() % 10;

更改10为 PLIST 中的总字数。

您现在可以从数组中选择随机词。

NSString *random = [words objectAtIndex:randInt];

你有一个随机词。找到另一个随机数(检查以确保它与前一个不同),然后从words数组中选择下一个单词。

于 2012-12-02T21:04:05.703 回答