双选择器视图

时间:2012-02-10 19:13:39

标签: iphone xcode4 uipickerview

您好我正在使用带有图像,单面文本和其他图像的双选择器视图,但我无法使其工作。这是拾取器组件。有3个数组,Array和Array1内容文本,以及ImagesArray内容图像。 X是一个变量,取决于你按下的按钮。感谢。

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:    (NSInteger)component;
{
    if (X == 1) {
       if (component == 0) {

        return [self.Array count];
        }
        if (component == 1)
        {
            return [self.ImagesArray count];    
        }
        }     
    if (X == 2) {

        if (component == 0) {
            return [self.Array1 count];
        }

        if (component == 1) {
            return [self.ImagesArray count];
        }            
        }
    }

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{

    if (component == 1){
        return [self.ImagesArray objectAtIndex:row];
    }
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
    if (X == 1){
        if (component == 0)
        { 
            return [self.Array objectAtIndex:row];
        }
    }   
    if (X == 2) {
        if (component == 0){
        return [self.Array1 objectAtIndex:row]; 
        }
}
}

1 个答案:

答案 0 :(得分:2)

让我指出一些代码问题。

  1. 在启动方法块之前,;方法的末尾有一个numberOfRows。那不行。
  2. 您使用大写的第一个字母作为实例变量 - 糟糕的主意。
  3. 您没有使用else子句,导致测试在不再需要时运行。
  4. 嵌套if语句的方式也会产生重复的代码。
  5. 您可能没有看到任何图像,因为您的图像阵列中有什么。这个数组,你使用它的方式,应该包含UIImageViews。但是,这会破坏可重用视图的目的。相反,您应该有一个包含图像或图像名称的数组,并仅在必要时创建视图。

    - (UIView *)pickerView:(UIPickerView *)pickerView 
                viewForRow:(NSInteger)row
              forComponent:(NSInteger)component 
               reusingView:(UIView *)view{
       if (component!=1) return nil;
       UIImageView *imageView = nil;
       UIImage *image = [UIImage imageNamed:[self.imagesArray objectAtIndex:row]];
       if (view==nil) {
         imageView = [[UIImageView alloc] initWithImage:image];
       }
       else {
          imageView = (UIImageView *)view;
          imageView.image = image;
       }
       view = imageView;
       return view;
    }
    

    如果仍然不起作用,请更具体地说明哪些不起作用。