1

我有一个包含 26 个字母的数组和一个包含 3 个 UIButtons 的第二个数组。我想从数组中随机抽取 3 个字母并将它们随机设置为 3 个 UIButtons 的标题。这里是代码。

-(void)placeImages {
     NSMutableArray *alphabetarr=[[NSArray alloc]  
     initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",
     @"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil];
     NSMutableArray *buttons = [NSArray arrayWithObjects:btn1, btn2, btn3, nil];
     for (UIButton *btn in buttons) {
           int randomIndex= arc4random() % [alphabetarr count];
           NSString* titre = [alphabetarr objectAtIndex:randomIndex];
           [btn setTitle:titre forState:UIControlStateNormal]; 
           [alphabetarr removeObjectAtIndex:randomIndex];                        
    }

通过使用此代码,我在一个 UIButton 中只看到一个字母。请建议任何人如何从数组中选择 3 个随机字母并将这 3 个随机字母设置为数组的 3 个 UIButton 的标题。

4

4 回答 4

2
-(void)placeImages {
 NSMutableArray *alphabetarr=[[NSMutableArray alloc]  
 initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",
 @"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil];
 NSMutableArray *buttons = [NSMutableArray arrayWithObjects:btn1, btn2, btn3, nil];
 for (UIButton *btn in buttons) {
       int randomIndex= arc4random() % [alphabetarr count];
       NSString* titre = [alphabetarr objectAtIndex:randomIndex];
       [btn setTitle:titre forState:UIControlStateNormal]; 
       [alphabetarr removeObjectAtIndex:randomIndex];                        
}

分配的是 NSArray 而不是 NSMutableArray。这应该有效。希望能帮助到你。快乐编码:)

于 2012-05-14T11:16:26.060 回答
2

试试这个来生成随机字符。无需为此设置数组。

char c = (char)('A' + arc4random_uniform(25))

参考这里

于 2012-05-14T11:16:29.473 回答
1

removeObjectAtIndex:是一种NSMutableArray方法,而不是NSArray's。改变你的alphabetarr类型,问题就会消失。

使用rand()arc4random()函数生成数字。在这里您可以看到两者之间的比较。

于 2012-05-14T10:56:08.110 回答
1

看起来问题在于您每次都用一个新字母覆盖按钮文本的内容。您需要保存按钮中的先前文本并每次都附加新字符,而不是用每个新字母重置它。

//gather random letter
NSString *titre = [alphabetarr objectAtIndex:randomIndex];

//gather current string
NSMutableString *currentString = [[btn titleLabel] text];

//append string
[currentString appendString:titre];

//set button text
[btn setTitle:currentString forState:UIControlStateNormal];

这应该每次都在按钮上附加一个新字母,而不是将其设置为从随机数组返回的最后一个字母。

希望有帮助:)

于 2012-05-14T12:51:33.807 回答