简体   繁体   中英

Custom UIPicker

I have been working on the app, that has 3 uipickers. I want to implement images in each uipicker. However as seen in the image attached below, it just affects only one uipicker, not all of them.I would like to know how I could able to custom all uipicker elements shown in the image 在此处输入图片说明

 - (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

Views can only have one parent. But you are trying to use each view for 3 parents (the 3 pickers). Regardless of the picker, you try to use the same set of image views for component X of each picker. That won't work.

You need three sets of arrays, not just the one set. In other words, you can't share views between the pickers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM