开发者

Customizing UIPickerView

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

Customizing UIPickerView

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 i开发者_C百科s, 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


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.


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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜