Установить заголовок кнопки и действие из изменяемого массива или словаря? - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть 4 возможных ответа: 3 неправильных и 1 правильный.

Я сохраняю 4 ответа в изменяемом массиве choiceValue как NSStrings.

    [choiceValue addObject:[NSString stringWithFormat:@"%d", incorrectOne]];
[choiceValue addObject:[NSString stringWithFormat:@"%d", incorrectTwo]];
[choiceValue addObject:[NSString stringWithFormat:@"%d", incorrectThree]];
[choiceValue addObject:[NSString stringWithFormat:@"%d", correctAnswer]];

Затем я перетасуюпорядок массива (не является частью этого вопроса)

Я хочу назначить заголовки (setTitle) 4 кнопок на основе индекса (перемешанного) массива.

Я попробовал следующий код, ноЯ полагаю, что чего-то не хватает:

    [button1 setTitle:[choiceValue objectAtIndex:0] forState:UIControlStateNormal];
[button1 addTarget:self action:@selector(handleIncorrectAnswer:) forControlEvents:UIControlEventTouchUpInside];

[button2 setTitle:[choiceValue objectAtIndex:3] forState:UIControlStateNormal];
[button2 addTarget:self action:@selector(handleCorrectAnswer:) forControlEvents:UIControlEventTouchUpInside];

[button3 setTitle:[choiceValue objectAtIndex:1] forState:UIControlStateNormal];
[button3 addTarget:self action:@selector(handleIncorrectAnswer:) forControlEvents:UIControlEventTouchUpInside];

[button4 setTitle:[choiceValue objectAtIndex:2] forState:UIControlStateNormal];
[button4 addTarget:self action:@selector(handleIncorrectAnswer:) forControlEvents:UIControlEventTouchUpInside];

В идеале, поскольку я вызываю разные методы для «действия», в зависимости от того, является ли ответ правильным или неправильным, я считаю, что это было бы лучше сделать, используя словарь (пара"title" / "имя метода").Но сейчас, если я смогу заставить его работать с изменяемым массивом - было бы здорово.

Помощь очень ценится!

1 Ответ

1 голос
/ 09 декабря 2011

Правильный ввод - указатель, не беспокойтесь.Мне удалось найти кнопку со следующим кодом, адаптированным из вашего примера.

NSMutableArray* choiceValue = [NSMutableArray new];
[choiceValue addObject:[NSString stringWithFormat:@"%d", 42]];
[button1 setTitle:[choiceValue objectAtIndex:0] forState:UIControlStateNormal]; // Assumes button1 is already instantiated and visible

Вы уверены, что строки в вашем массиве создаются правильно?Вы используете% d для их указания, что заставляет меня думать, что они целые.Можете ли вы проверить это и выйти из системы с помощью аналогичного строкового вызова?Можете ли вы использовать жестко закодированную строку в качестве заголовка кнопки?

NSLog([NSString stringWithFormat:@"%d", incorrectOne]); // Test that your string is created correctly
[button1 setTitle:@"42" forState:UIControlStateNormal]; // Test that your button is capable of displaying a title
...