2014-11-25 2 views
1

동적으로 생성 할 인터페이스의 일부가 필요한 앱이 있습니다. 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 
+1

NSMutableArray에 대한 설명서를 살펴보십시오. –

+0

나는 몇 번이나 읽었고 아마도 내가하고 싶은 일과 관련이없는 것 같아. 하지만, 나는 과거에 NSMuteableArray로 좋은 성공을 거두었고 여기서 그것을 사용할 계획을 세웠다. 스위치 상태에서 값을 가져올 수 없습니다. 고유 한 UISwitch 속성에 각 항목을 바인딩 할 수 있으므로 Interface Builder를 사용할 때 문제가되지 않습니다. 그러나 동적으로 생성 될 때 이러한 값을 설정 한 다음 배열로 전달하는 방법으로 손실됩니다. –

답변

1

는 용량이 다른 가변 배열을 만듭니다

적으로는, 내가 좋아하는 뭔가로 끝날 것입니다. 해당 배열에서 각 값을 0으로 설정하십시오. for 루프에서 스위치 (elf.qSwitch)를 작성하는 경우 스위치의 태그를 증가하는 숫자로 설정하십시오. 스위치를 건드린 경우, 터치 된 스위치의 태그를 이용하여 새로운 어레이의 값을 업데이트함으로써 (새로운) 가변 배열에 on 상태 (0 또는 1)를 저장하십시오. 예제를 보여줄 가치는 없지만이 접근 방식이 도움이되는지 알려주시겠습니까?

+0

얼굴 손바닥! 증분 태그는 정확히 내가 필요한 것입니다. 네가 그 말을하기 전까지 나는 그걸 기억하지 못했다. 빨리 시도해보고 효과가 있으면 받아 들일 수있는 것으로 표시합니다. –