Raj Pawan Gumdal
Raj Pawan Gumdal

Reputation: 7438

Customizing UIPickerView

I have a requirement where UIPickerView should be customized. The picker view should look something like this:

alt text

The application which has customized the pickerView similarly is: http://itunes.apple.com/us/app/convert-the-unit-calculator/id325758140?mt=8

I have tried removing the default pickerView selection bar by resetting the property showsSelectionIndicator of UIImagePicker and adding a overlay view. But the problem is, the overlay view should be transparent so that the wheel behind it is visible. But the other application somehow does it even though the selection bar is not transparent.

Any ideas on how to achieve this feat?

Thanks and Regards, Raj

Upvotes: 4

Views: 5500

Answers (2)

Slavik
Slavik

Reputation: 1083

I think you can print the subviews under the picker and modify them. The UIPickerView create subviews after the data is first loaded. With performSelecter:WithObject:afterDelay:, you can remove them or insert whatever you need.

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self refreshClock];
    [timePicker_ performSelector:@selector(leakSelf) withObject:nil afterDelay:0];
    [self performSelector:@selector(setupTimePicker) withObject:nil afterDelay:0];
}
- (void)setupTimePicker {
    [[timePicker_ subviewOfClass:NSClassFromString(@"_UIPickerViewTopFrame")] removeFromSuperview];
    CGRect frame = timePicker_.frame;
    frame.size.width += 20;
    frame.origin.x -= 10;
    timePicker_.frame = frame;
}


@implementation UIView(UIViewDebugTool)


- (void)leakSubview:(UIView*)subroot atDepth:(NSUInteger)dep {

    DLog( @"trace sub view[%u] %@", dep, [subroot description] );
    CALayer* layer = subroot.layer;
    for( CALayer* l in layer.sublayers ) {
        DLog( @"layer[%u] %@", dep, l );
    }
    for( UIView* v in subroot.subviews ) {
        [self leakSubview:v atDepth:dep+1];
    }

}

- (void)leakSelf {
    NSUInteger dep = 0;
    [self leakSubview: self atDepth:dep];
}

@end

Upvotes: 1

kodai
kodai

Reputation: 3189

You're going to have to write your own from scratch on this one. UIPickerview isn't customizable. At. All. Sucks, but that's how it is. I'd start out creating a uitableview and layering a frame around it, and trying to mimic uipickerview.

Upvotes: 1

Related Questions