Добавление значений в NSArray из динамически создаваемых элементов UISwitch
У меня есть приложение, которое нуждается в динамической генерации части интерфейса. Через ответ API я получаю представление JSON, содержащее идентификатор и метку, для каждого элемента, который мне нужно создать. За пару шагов я конвертирую JSON в массивы и сохраняю значения в plist. Следующим шагом является создание интерфейса из сохраненных значений.
Это все работает, как и планировалось. Я могу динамически генерировать элементы интерфейса, и они на самом деле отображаются на экране, где они должны!
Проблема, которую я имею, состоит в том, чтобы выяснить, как получить выбранные значения и добавить их в новый массив для отправки в веб-службу. Часть веб-сервиса, я обработал.
Вот код, который показывает, как я получаю свои элементы UISwitch в представлении. Весь другой код, который я написал, чтобы попытаться заполнить массив, был провалом. Так что я не хочу смущать себя больше, чем мне тоже нужно!
//this method gets called from viewDidLoad
-(void) setupUI {
//Get path from the root directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// Get a path to the documents directory from the list
NSString *documentPath = [paths objectAtIndex:0];
// Create a full file path by appending the name of plist
NSString *plistPath = [documentPath stringByAppendingPathComponent:@"settings.plist"];
// Create dictionary from values in plist
NSDictionary *infoDictionary = [NSDictionary dictionaryWithContentsOfFile:plistPath];
// Creaet Arrays from dictionary contents
NSArray *evqArray = infoDictionary[@"evqDict"];
NSArray *exqArray = infoDictionary[@"exqDict"];
// Combine arrays
NSMutableArray *qualifiersArray = [[NSMutableArray alloc] initWithCapacity:60];
[qualifiersArray addObjectsFromArray:evqArray];
[qualifiersArray addObjectsFromArray:exqArray];
//Set initial y coordinate to -35 because it's easy.
int yPosStart = -35;
// Create a UISwitch and label for each item in qulifiersArray
for (id label in qualifiersArray) {
// for every item in the array, add 35 pixels to the xPosStart
yPosStart = yPosStart + 35;
// Convert integer into CGFloat for positioning
CGFloat yPosition = yPosStart;
// Create a string to be used for updating the UISwitch label.
NSString *labelText = label[@"label"];
NSLog(@"evq labels: %@", labelText);
UILabel *switchLabel = [[UILabel alloc] initWithFrame:CGRectMake(60, yPosition, 240, 27)];
[switchLabel setText:labelText];
self.qSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0, yPosition, 0, 0)];
[self.qSwitch addTarget:self action:@selector(changeSwitch:) forControlEvents:UIControlEventValueChanged];
[myView addSubview:self.qSwitch];
[myView addSubview:switchLabel];
}
}
Итак, вышеприведенный код выводит UISwitch для каждого элемента в массиве, но я не знаю, как создать новый массив на основе выбора, сделанного пользователем.
В идеале я хотел бы получить что-то вроде:
label1 = YES,
label2 = YES,
label3 = NO,
label4 = YES,
lable5 = NO
1 ответ
Создайте еще один изменяемый массив с емкостью вашего массива переключателей. В этом массиве установите для каждого значения значение 0. Когда вы создаете переключатели (elf.qSwitch) в цикле for, присвойте тегу switch значение с приращением. При касании переключателя сохраните состояние "включено-выключено" (0 или 1) в (новом) непостоянном массиве, обновив значение нового массива, используя тег переключателя, к которому был произведен прикосновение. Не стоит показывать пример, но дайте мне знать, если этот подход помогает?