我正在尝试创建一个iPhone应用程序,其中有50个按钮,编号为1到50。
现在,我想选择50个随机按钮中的任意一个,它的值(数字)。
我的问题是,
答案 0 :(得分:3)
您可以像这样以编程方式创建按钮(将它们作为子视图添加到容器视图): How do I create a basic UIButton programmatically?
您可以在其标签中保留按钮的编号。
要选择具有给定标签的按钮,请使用[containerView viewWithTag:(NSInteger)]。
要选择6种不同的随机视图,您需要生成6个不同的随机数,并使用上述方法。
你可以这样做。
bool used[51];
for (int i = 1 ; i <= 50 ; ++i)
used[i] = false;
int count = 0;
int resulttags[6];
while (count < 6) {
int index = 1 + random() % 50;
if (!used[index]) {
used[index] = true;
resulttags[count++] = index;
}
}
答案 1 :(得分:0)
创建一个循环,在其中创建50个按钮并将它们存储在可变数组中。
最好通过在NSMutableArray上创建一个类别并从中挑选前6个对象来对阵列进行随机播放。
您可以在我的arraytools
缺少一个重要信息:按钮触发的方法如何?如何?
如果您有像-pressedButton<No>:
那样的常规内容,那么for循环可能如下所示:
创建并存储50个按钮
self.buttons = [NSMutableArray arrayWithCapacity:50]; //NSMutableArray
for (int i=0; i<50, i++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self
action:@selector(NSSelectorFromString([NSString stringWithFormat:@"pressedButton%i:", i]))
forControlEvents:UIControlEventTouchDown];
[buttons addObject:button];
}
随机播放并选择6个按钮
[buttons shuffle]; // see arraytools
NSArray *sixButtons = [buttons objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0,6)]];
最后为sixButtons
中的每个按钮计算一个框架,并将其添加到指定的视图[view addSubview:button];
如果每个Button都没有方法,则可以通过按钮数组中的索引区分按钮。但要小心:在这种情况下,你不应该洗牌。相反,你应该将它转换为一个不可变的数组
NSMutableArray *buttonsTemp = [NSMutableArray arrayWithCapacity:50];
for (int i=0; i<50, i++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self
action:@selector(buttonPressed:)
forControlEvents:UIControlEventTouchDown];
[buttonsTemp addObject:button];
}
self.buttons = [NSArray arrayWithArray:buttonsTemp]; //Member of type NSArray
现在你可以随机选择6个按钮
NSSet *sixButtos = [buttons setWithRandomElementsSize:6];//see arraytools
-buttonPressed:
可能是这样的:
-(void) buttonPressed:(UIButton *)sender
{
NSUInteger buttonIndex = [buttons indexOfObject:sender];
//Now you can use if or switch to distinguish, what needs to be done
}