2012-05-31 3 views
0

두 개의 UIPickerView에 문제가 있습니다.동적 UIPickerView 업데이트

pickerParent라는 첫 번째 피커는 음식의 유형을 선택합니다. 두 번째 피커 pickerChild는 이러한 유형의 음식 목록을 표시합니다.

문제는 pickerChild가 해당 항목 중 하나를 선택하려고하면 pickerChild가 pickerParent의 해당 항목과 일치하도록 업데이트된다는 것입니다. 예 : pickerParent에서 고기를 선택하면 pickerChild에 "생강 쇠고기, 레몬 닭고기, 소금 & 후추 갈비 및 달콤한 & 신 돼지 고기"가 표시됩니다. 그런 다음 Sweet & 신 돼지 고기를 선택하면 선택 항목의 네 번째 항목이됩니다. 목록에서 야채의 속성을 얻고 "모듬 된 야채"만 표시)

누군가 나를 도와 줄 수 있습니까? 자식 자체를 업데이트하지 않습니까?

내 코드는 다음과 같습니다. 아이 피커 변경 한 중 피커 다시로드됩니다 있도록

#import "MasterViewController.h" 

#import "DetailViewController.h" 

@interface MainPage() { 
    NSMutableArray *_objects; 
} 
@end 

@implementation MainPage 
@synthesize pickerChild; 
@synthesize pickerParent; 
@synthesize image_view; 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return (pickerView == pickerParent ? 1 : 1); 
} 

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 
    NSArray *values = (pickerView == pickerParent ? topics : items); 
    return [values count]; 
} 

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 
    NSArray *values = (pickerView == pickerParent ? topics : items); 
    return [values objectAtIndex: row]; 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 
    if ([[topics objectAtIndex:row] isEqual:@"Noodles"]) { 
     items = noodle; 
    } else if ([[topics objectAtIndex:row] isEqual:@"Rice"]) 
    { 
     items = rice; 
    } else if ([[topics objectAtIndex:row] isEqual:@"Meat"]) 
    { 
     items = meat; 
    } else if ([[topics objectAtIndex:row] isEqual:@"Vegetables"]) 
    { 
     items = vegatable; 
    } else if ([[topics objectAtIndex:row] isEqual:@"Favorites"]) 
    { 
     items = favorite; 
    } 
[pickerChild reloadAllComponents]; 

} 

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
} 

- (void)viewDidLoad 
{ 
    topics = [[NSMutableArray alloc] init]; 
    [topics addObject:@"Noodles"]; 
    [topics addObject:@"Rice"]; 
    [topics addObject:@"Meat"]; 
    [topics addObject:@"Vegetables"]; 
    [topics addObject:@"Favorites"]; 

    noodle = [[NSMutableArray alloc] init]; 
    [noodle addObject:@"Fried Noodles"]; 
    [noodle addObject:@"Shanghai Noodles"]; 

    meat = [[NSMutableArray alloc] init]; 
    [meat addObject:@"Ginger Beef"]; 
    [meat addObject:@"Lemon Chicken"]; 
    [meat addObject:@"Salt & Pepper Ribs"]; 
    [meat addObject:@"Sweet & Sour Pork"]; 

    vegatable = [[NSMutableArray alloc] init]; 
    [vegatable addObject:@"Assorted Vegetables"]; 

    rice = [[NSMutableArray alloc] init]; 
    [rice addObject:@"Fried Rice"]; 

    items = noodle; 

    [super viewDidLoad]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 
@end 

답변

0

귀하의 didSelectRow.. 위임 방법은 두 선택기를 구분하지 않습니다. 상위 선택기에서 선택 사항이 변경된 경우에만 하위 선택기를 다시로드하려고합니다.

그래서, 현재에이 코드 랩 :

if (pickerView == parentPicker) 

을 그리고 당신은 괜찮을 것이다.