I have an app that needs part of the interface to be generated dynamically. Via an API response, I get a JSON representation, containing an ID and label, for each item I need to create. Over a couple of steps, I convert the JSON to arrays and save the values to a plist. Next step is to build the interface from the saved values.
This all works as planned. I can dynamically generate the interface elements and they actually show up on the screen where they are supposed to!
The problem I am having is figuring out how to grab the selected values and add them to a new array for sending to a web service. The web service part, I have handled.
Here is the code that shows how I get my UISwitch elements in the view. All other code I have written to try and populate an array has been a flop. So I don't want to embarrass myself any more than I need too!
//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];
}
}
So, the above code outputs a UISwitch for every item in the array, but I have no idea how to create a new array based on the selections a user makes.
Ideally, I would end up with something like:
label1 = YES,
label2 = YES,
label3 = NO,
label4 = YES,
lable5 = NO