更改UIPickerView背景

时间:2009-06-08 15:12:39

标签: iphone uipickerview

我想更改UIPickerView的边框颜色。我没有看到UIPickerView的色调属性。有什么办法可以做到吗?或者解决方法?

感谢。

10 个答案:

答案 0 :(得分:27)

您还可以屏蔽该组件。稍微装点一下,您可以获得组件的大小,并使用以下代码将其删除:

CALayer* mask = [[CALayer alloc] init];
        [mask setBackgroundColor: [UIColor blackColor].CGColor];
        [mask setFrame:  CGRectMake(10.0f, 10.0f, 260.0f, 196.0f)];
        [mask setCornerRadius: 5.0f];
        [picker.layer setMask: mask];
        [mask release];

别忘了

#import <QuartzCore/QuartzCore.h>

答案 1 :(得分:18)

如果您只想要一个解决方法,请在模拟器中进行屏幕截图,在photoshop中打开它,将其裁剪到UIPickerView区域,使中心透明,应用您想要的任何色调,将该图像添加到项目中,以及将它添加为UIPmageView顶部的UIImageView。

答案 2 :(得分:14)

我的UIPickerView有3个组件。没有选择指标。

这给了它11个子视图。 [[picker subviews] count]

隐藏第一个和最后一个子视图会完全删除背景。

[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];

隐藏每隔三个子视图(索引1,4和7)会隐藏组件上的不透明背景。给我一个很好的效果,我可以按照自己的意愿去皮肤。

希望能帮助某人:)

答案 3 :(得分:5)

我相信this article也会有所帮助。

答案 4 :(得分:5)

选择器在完全加载之前不会有子视图。如果您尝试这样做:

[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];

在viewDidLoad或viewWillAppear 中将无法正常工作。但是,我将我的一个UIPickerView协议方法移动到了它,并删除了背景框架。

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if (self.pickerBackgroundNotHidden)
    {
        self.pickerBackgroundNotHidden = false;
        [(UIView*)[[tempPicker subviews] objectAtIndex:0] setHidden:YES];
        [(UIView*)[[tempPicker subviews] objectAtIndex:7] setHidden:YES];
        [(UIView*)[[tempPicker subviews] objectAtIndex:8] setHidden:YES];
    }
    return [arrayColors objectAtIndex:row];
}

您可能可以将选择器子类化为更高效地执行此操作,但我更愿意避免使用子类。

哦,这也许很明显,但如果您的选择器中没有任何项目,则上面的代码不会删除子视图。

答案 5 :(得分:4)

这是一个现代的,像素完美的版本,带有@Lukas答案的ARC,因为有些问题永远不会过时:

#import <QuartzCore/QuartzCore.h>

// . . .

CALayer* mask = [[CALayer alloc] init];
         mask.backgroundColor = [UIColor blackColor].CGColor;
         mask.frame = CGRectInset(picker.bounds, 10.0f, 10.0f);
         mask.cornerRadius = 5.0f;
         picker.layer.mask = mask;

这个答案适用于任何尺寸的拣货员b / c,图层尺寸是即时计算的。

enter image description here

答案 6 :(得分:2)

您可以使用IXPickerOverlayView available on GitHub完全替换您选择的背景图片来更改背景颜色(repo包含使用此类的示例示例)。

请注意,您必须从头开始绘制(矩形)背景,但与此处提到的任何变通方法不同,这种方法是完全动态的:即使您更改了拾取轮的数量,它们也能正确显示运行时的大小(如更改系统区域设置时的UIDatePicker)。

获得背景图片后,使用IXPickerOverlayView就像在Picker视图顶部添加IXPickerOverlayView实例并指定hostPickerView属性一样简单。

答案 7 :(得分:1)

实际上为了纠正你,你实际上可以在UIPickerview上放一个.png并仍然使用Picker View,只需确保中间是透明的,否则你将看不到行。

答案 8 :(得分:0)

只需将此行添加到您的UIPickerView方法之一:

[[[MyPicker subviews] objectAtIndex:4] setBackgroundColor: [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]]];

答案 9 :(得分:0)

您可以执行以下操作:

按向导或代码设置选择器视图背景颜色,如下所示:

Picker1.backgroundColor = [UIColor someColor];// clearColor for transparent

为编号为0,1和3的选择器视图子视图设置alpha值。(不知道为什么有子视图2的想法)。在拾取器视图的第一个加载数据之后通过代码执行,如下所示(如果在DidViewLoad中执行此操作,则会抛出异常)。

[(UIView*)[[Picker1 subviews] objectAtIndex:0] setAlpha:someValue];// 0.0f for transparent
[(UIView*)[[Picker1 subviews] objectAtIndex:1] setAlpha:someValue];
[(UIView*)[[Picker1 subviews] objectAtIndex:3] setAlpha:someValue];

不要忘记在viewForRow方法中清除要发送到选择器视图的标签的背景颜色。

lbl.backgroundColor = [UIColor someColor];// could be clearColor