Я хочу выбрать 6 случайных кнопок из пятидесяти - PullRequest
0 голосов
/ 15 ноября 2011

Я пытаюсь создать приложение для iPhone, в котором у меня есть 50 кнопок, пронумерованных от 1 до 50.

Теперь я хочу выбрать любые 6 из 50 случайных кнопок и их значение (цифры).

Мои вопросы,

  1. Как выбрать только 6 кнопок?
  2. Прямо сейчас я думаю взять 50 разных IBOutlets и 50 IBActions соответственно для каждой кнопки для достижения моей цели. Есть ли какая-нибудь другая лучшая альтернатива, которую я могу использовать, например, Array of Button?
  3. Как получить значение определенной кнопки?

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Вы можете создать кнопки программно следующим образом (добавить их в качестве подпредставлений в представление контейнера): Как программно создать базовую UIButton?

Вы можете сохранить номерКнопка в свойстве меткии используйте описанный выше метод.

Вы можете сделать это следующим образом.

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 голосов
/ 15 ноября 2011

Создайте цикл, в котором вы создадите 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];


Если у вас нет метода для каждой кнопки, вы можете различать кнопки по их индексам в массиве кнопок. Но будьте осторожны: в этом случае вы не должны перемешивать это. Вместо этого вы должны преобразовать его в неизменяемый массив

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...