自定义UIPickerView

时间:2010-06-07 12:50:16

标签: iphone cocoa-touch uipickerview

我有一个要求UIPickerView应该被定制的要求。选择器视图应如下所示:

alt text http://i45.tinypic.com/2ut565s.png

同样定制pickerView的应用程序是: http://itunes.apple.com/us/app/convert-the-unit-calculator/id325758140?mt=8

我尝试通过重置UIImagePicker的属性showsSelectionIndicator并添加叠加视图来删除默认的pickerView选择栏。但问题是,叠加视图应该是透明的,以便它后面的轮子可见。但是,即使选择栏不透明,其他应用程序也会以某种方式执行此操作。

关于如何实现这一壮举的任何想法?

谢谢和问候, 拉吉

3 个答案:

答案 0 :(得分:2)

这是关于自定义UIPickerView的非常好的文章 http://www.inexika.com/blog/Customizing-UIPickerView-UIDatePicker

答案 1 :(得分:1)

你将不得不从头开始写这个。 UIPickerview无法自定义。在。所有。很糟糕,但就是这样。我开始创建一个uitableview并在其周围分层框架,并试图模仿uipickerview。

答案 2 :(得分:1)

我认为您可以在选择器下打印子视图并进行修改。 首次加载数据后,UIPickerView会创建子视图。 使用performSelecter:WithObject:afterDelay:,您可以删除它们或插入您需要的任何内容。

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