Добавление значений в 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) в (новом) непостоянном массиве, обновив значение нового массива, используя тег переключателя, к которому был произведен прикосновение. Не стоит показывать пример, но дайте мне знать, если этот подход помогает?

Другие вопросы по тегам