将NSArray的随机对象放入随机UIButtons NSArray的标题

时间:2012-05-14 10:52:25

标签: iphone objective-c ios nsarray random-access

我有一个带有26个字母的数组和带有3个UIButton的第二个数组。我想从数组中随机取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中看到只有一个alphet ..请给出任何一个如何从数组中选择3个随机alphatbet并将这3个随机字母设置为3个UIButtons数组的标题。

4 个答案:

答案 0 :(得分: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。这应该工作。希望能帮助到你。快乐的编码:)

答案 1 :(得分:2)

尝试此操作以生成随机字符。无需为此设置数组。

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

Refer here

答案 2 :(得分:1)

removeObjectAtIndex:NSMutableArray方法,而不是NSArray。更改alphabetarr类型,问题就会消失。

使用rand()arc4random()功能生成号码。 Here你可以看到两者之间的比较。

答案 3 :(得分: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];

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

希望有所帮助:)