동적으로 생성 할 인터페이스의 일부가 필요한 앱이 있습니다. API 응답을 통해 작성해야하는 각 항목에 대해 ID와 레이블을 포함하는 JSON 표현을 얻습니다. 몇 단계를 거치면서 JSON을 배열로 변환하고 plist에 값을 저장합니다. 다음 단계는 저장된 값에서 인터페이스를 작성하는 것입니다.동적으로 생성 된 UISwitch 요소에서 NSArray에 값 추가
이 모두가 계획대로 작동합니다. 나는 동적으로 인터페이스 요소를 생성 할 수 있으며 실제로 그들이 화면 상에 나타나게된다.
내가 겪고있는 문제는 선택한 값을 가져와 웹 서비스로 보내는 새 배열에 추가하는 방법을 파악하는 것입니다. 웹 서비스 부분, 내가 처리했습니다.
다음은 뷰에서 내 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
NSMutableArray에 대한 설명서를 살펴보십시오. –
나는 몇 번이나 읽었고 아마도 내가하고 싶은 일과 관련이없는 것 같아. 하지만, 나는 과거에 NSMuteableArray로 좋은 성공을 거두었고 여기서 그것을 사용할 계획을 세웠다. 스위치 상태에서 값을 가져올 수 없습니다. 고유 한 UISwitch 속성에 각 항목을 바인딩 할 수 있으므로 Interface Builder를 사용할 때 문제가되지 않습니다. 그러나 동적으로 생성 될 때 이러한 값을 설정 한 다음 배열로 전달하는 방법으로 손실됩니다. –