我想从50个中选择6个随机按钮

时间:2011-11-15 12:09:45

标签: iphone objective-c cocoa-touch

我正在尝试创建一个iPhone应用程序,其中有50个按钮,编号为1到50。

现在,我想选择50个随机按钮中的任意一个,它的值(数字)。

我的问题是,

  1. 我怎样才能选择6个按钮?
  2. 现在我正在考虑为每个按钮分别采用50种不同的IBOutlets和50种IBAction来实现我的目的。还有其他更好的选择,我可以像一个按钮阵列那样去吗?
  3. 如何检索特定按钮的值?

2 个答案:

答案 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

}