ios - 自定义 UIPicker

标签 ios uipickerview

我一直在开发这个应用程序,它有 3 个 uipickers。我想在每个 uipicker 中实现图像。然而,如下图所示,它只影响一个 uipicker,而不是全部。我想知道如何能够自定义图像 enter image description here 中显示的所有 uipicker 元素

 - (void)loadView
    {
        picker1 = [[UIPickerView alloc] initWithFrame:CGRectMake(30, 200, 250, 250)];
        picker1.delegate = self;
        picker1.dataSource = self;
        picker1.showsSelectionIndicator = YES;
        picker1.tag=1;


        picker2 = [[UIPickerView alloc] initWithFrame:CGRectMake(390, 200, 250, 250)];
        picker2.delegate = self;
        picker2.dataSource = self;
        picker2.showsSelectionIndicator = YES;
        picker2.tag=2;



        picker3 = [[UIPickerView alloc] initWithFrame:CGRectMake(750, 200, 250, 250)];
        picker3.delegate = self;
        picker3.dataSource = self;
        picker3.showsSelectionIndicator = YES;
        picker3.tag=3;


        self.view = [[UIView alloc] initWithFrame:CGRectZero];
        self.view.backgroundColor=[UIColor whiteColor];

        [self.view addSubview:picker1];
        [self.view addSubview:picker2];
        [self.view addSubview:picker3];


        UIImage *seven = [UIImage imageNamed:@"seven.png"];
        UIImage *bar = [UIImage imageNamed:@"bar.png"];


        for(int i=1; i<=4; i++)
        {
            UIImageView *sevenView = [[UIImageView alloc] initWithImage:seven];
            UIImageView *barView = [[UIImageView alloc] initWithImage:bar];


            NSArray *imageViewArray = [[NSArray alloc] initWithObjects:
                                       sevenView,barView,nil];

            NSString *fieldName = [[NSString alloc] initWithFormat:@"column%d",i];
            [self setValue:imageViewArray forKey:fieldName];
        }

    }


    -(UIView *)pickerView:(UIPickerView *)pickerView
               viewForRow:(NSInteger)row
             forComponent:(NSInteger)component reusingView:(UIView *)view
    {
        //NSLog(@"%d",component);
        NSLog(@"tag: %d",pickerView.tag);

        if(pickerView.tag==1)
        {   NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
            NSArray *array1 = [self valueForKey:arrayName];
            return [array1 objectAtIndex:row];
        }
        else if(pickerView.tag==2)
        {   NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
            NSArray *array2 = [self valueForKey:arrayName];
            return [array2 objectAtIndex:row];
        }
        else
        {   NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",component+1];
            NSArray *array3 = [self valueForKey:arrayName];
            return [array3 objectAtIndex:row];
        }

    }

    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
        // Release anything that's not essential, such as cached data
    }


    - (void)dealloc {

    }

    #pragma mark UIPickerViewDelegate methods

    - (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component
    {
        return [NSString stringWithFormat:@"%d",row];
    }

    #pragma mark UIPickerViewDataSource methods

    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView*)pv
    {
        return 4;
    }


    - (NSInteger)pickerView:(UIPickerView*)pv numberOfRowsInComponent:(NSInteger)component
    {
        return 2;
    }

    @end

最佳答案

View 只能有一个父 View 。但是您尝试将每个 View 用于 3 个 parent (3 个选择器)。无论使用哪种选择器,您都尝试对每个选择器的组件 X 使用相同的 ImageView 集。那是行不通的。

您需要三组数组,而不仅仅是一组。换句话说,您无法在选择器之间共享 View 。

关于ios - 自定义 UIPicker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548055/

相关文章:

swift - 如何设置pickerview水平

ios - 带有 "external"数据源和 Swift 中的委托(delegate)的 UIPickerView

ios - 弱 IBOutleCollection 始终为零

ios - 如何在重新进入查看时转储核心数据搜索结果 FRC?

swift - fatal error : Index Out of Range(UIPickerView)

ios - UIPickerView 中显示的数组不正确

ios - Swift调用AnyClass类函数

ios - 在 UICollectionView 中创建部分

iphone - MKStoreKit 编译错误

objective-c - 将 UI Picker 添加到 UITextView