2010-06-07 73 views
4

我有一个需要在哪里应该定制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选择栏并添加覆盖视图。但问题是,叠加视图应该是透明的,以便它后面的轮子可见。但即使选择栏不透明,其他应用程序也会以某种方式执行此操作。

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

感谢和问候, 拉吉

+0

我已经在我的项目来实现这一点,我怎么能实现它相当好文章? – 2016-12-20 07:15:59

+0

当我在寻找解决方案时,没有直接的方法来实现它。我能够说服设计团队改变它的外观和感觉。 – 2017-01-10 08:34:32

回答

1

你将不得不在这一个从头开始编写自己的。 UIPickerview不可定制。在。所有。糟透了,但事情就是这样。我会开始创建一个可用视图,并围绕它构建一个框架,并尝试模仿uipickerview。

+0

感谢您的建议,但使用表格视图,你确定这个壮举是可以实现的吗?我的意思是,你是否认识到了实现它的障碍? – 2010-08-11 08:51:32

+0

我一直无法自己做。但唯一的障碍是抓住SelectedComponet。你应该可以通过使用contentOffset并按照这种方式进行计算。我没有做到,但我不明白你为什么做不到。我很确定苹果的uipickerview使用某种可用的方式来呈现单元格。 – kodai 2010-08-11 19:34:59

+0

是的,自定义它是可能的,但唯一的障碍是改变字体颜色。进入选择栏的部分文字的字体颜色应改为白色,其余部分应为原始颜色。这可能吗? – 2010-08-13 04:51:17

1

我想你可以在选择器下打印子视图并修改它们。 数据第一次加载后,UIPickerView创建子视图。 With 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