2011-11-15 53 views
0

我想創建一個iPhone應用程序中,我有50個按鈕,編號從1到50我要選擇6個隨機按鈕出五十

現在,我要選擇任何隨機6出50按鈕和它的價值(數字​​)。

我的問題是,

  1. 如何我只能選擇6個按鈕?
  2. 現在我正在考慮爲每個按鈕分別取50個不同的IBOutlet和50個IBA,以達到我的目的。有沒有其他更好的選擇,我可以像一個數組按鈕?
  3. 如何檢索特定按鈕的值?
+2

這是不太清楚你意思。一次會顯示多少個按鈕?按鈕之間有什麼區別?當他們被挖掘時會發生什麼? – jrturton

+0

是的,你可以創建NSArray或NSMutableArray來存儲你的50個按鈕。 – Maulik

+0

@jrturton,對不起,但這裏是你的問題的答案。基本上會有1到50個數字作爲屏幕上的按鈕,用戶只能從中選擇6個數字。所有的按鈕被命名爲1到50的數字。當用戶點擊六個隨機按鈕時,每個按鈕的值應該存儲在一個單獨的字符串中。 – MayurCM

回答

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; 
    } 
} 
+0

你應該使用arc4random()而不是random() - http://iphonedevelopment.blogspot.com/2008/10/random-thoughts-rand-vs-arc4random.html – Eugene

+0

爲什麼使用標籤,當你只是可以保持對象? – vikingosegundo

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];


如果你沒有爲每個按鈕的方法,你可以通過按鈕陣列內的索引相區別的按鈕。但要小心:在這種情況下,你不應該洗牌。相反,你應該改變它int值unmutable陣列

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 

}