2010-06-07 71 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