以编程方式创建两个UIPickerViews,但所有值都转到第二个

时间:2012-01-30 17:26:52

标签: iphone objective-c ios

我正在编写代码以编程方式创建视图。在这个视图中我创建了两个UIPickerViews,但是,正如标题所解释的那样,当我用数据填充列表时,所有数据都进入第二个表,而第一个表中没有数据。我可以看到问题究竟在哪里,但不知道如何修复它。以下是围绕非相关部分进行编辑的代码。

在下面的部分是我创建pickerview的地方。基本上我有一大堆数据。如果我看到任何“RadioButton”的出现我创建了一个PickerView。 RadioButton可以出现不止一次,也是我的问题所在。

 for(int i = 0; i < [list count]; i++){  
 ...

 else if([input.controlTypeName compare:@"RadioButton"] == NSOrderedSame){
        [radioList addObject:input.sourceText]; 
        radioPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(50, y, 220, 200)];
        radioPicker.delegate = self;
        radioPicker.showsSelectionIndicator = YES;
        [inputsView addSubview:radioPicker];
        y = y+220;

    }

委托方法如下..

       - (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component {
// Handle the selection
}

// tell the picker how many rows are available for a given component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

if([pickerView isEqual: radioPicker]){
    return [radioList count];
}




 // tell the picker how many components it will have
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
   return 1;
}

 // tell the picker the title for a given component
 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

  if([pickerView isEqual: radioPicker]){
    id myArrayElement = [radioList objectAtIndex:row];
    NSString *title = myArrayElement; 
    NSLog(@"title to fill radio:%@", title); 
    return title;
  }


 }

// tell the picker the width of each row for a given component
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
int sectionWidth = 200;

   return sectionWidth;
 }

基本上似乎正在发生的是'RadioButton'ListPicker的第二次创建,第一个创建失去了标签'radioPicker'和行

if([pickerView isEqual: radioPicker]){ 

失败。因此,所有数据都被推送到第二个(和最新的)创建中。但我不知道怎么会发生这种情况。任何想法都会很棒。

感谢。

1 个答案:

答案 0 :(得分:2)

问题是你有一个单一的实例变量radioPicker。有两个UIPickerView并且是两者的代表都没关系。但是,您需要将委托方法基于传入的值,而不是(单个)实例变量。

实际上没有必要radioPicker。发送addSubview:后,只需自动发布视图(除非您使用ARC)。

为了区分视图,您可能需要设置tag属性,并在titleForRow:委托方法中使用它。