2012-03-24 38 views
0

我想创建一个双组件UIPickerView,其左侧包含扑克牌的值(两个,三个,Jack等)和右侧其中包含四套西装的图像。下面是相关代码:UIPickerView - 一个组件作为图像,另一个作为文本

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
     return 2; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component { 
     if (component == 0) 
      return [self.values count]; 
     return [self.column1 count]; 
} 


- (NSString *)pickerView:(UIPickerView *)pickerView 
     titleForRow:(NSInteger)row 
     forComponent:(NSInteger)component { 
     if (component == 0) 
      return [self.values objectAtIndex:row]; 
     else 
      return nil; 
} 

- (UIView *)pickerView:(UIPickerView *)pickerView 
     viewForRow:(NSInteger)row 
     forComponent:(NSInteger)component reusingView:(UIView *)view { 
     if(component == 1){ 
      NSString *arrayName = [[NSString alloc] initWithFormat:@"column1"]; 
      NSArray *array = [self valueForKey:arrayName]; 
      return [array objectAtIndex:row]; 
     } 
     else 
      return nil; 
} 

正如你可能会看到,我已尝试创建左构件和右构件的独立选择器的委托方法。但是,这并没有给我预期的结果。该代码似乎只运行viewForRow方法,忽略其他。因此,我最终得到了用图像填充的正确组件,而左侧组件是空的。有人知道用不同的方式来填充这两个组件吗?

回答

1

可能很快,当您执行viewForRow:时,它赢得了titleForRow:

只需返回一个UILabel所需的文本。毕竟titleForRow:没有做别的。这只是一个更方便的方法,如果你只需要标签。

+0

另外你的代码似乎有点奇怪。在'viewForRow:'方法中,您可以直接使用'[self.column1 objectAtIndex:row]'而不是现在的三行。 – calimarkus 2012-03-24 21:17:38

+0

好通话的人。谢谢。 – 2012-03-25 00:17:30

相关问题