更改UIPickerView背景

我想改变一个UIPickerView的边框颜色。 我没有看到UIPickerView的tint属性。 有什么办法可以做到吗? 还是解决方法?

谢谢。

如果你只是想要一个解决方法,在模拟器中的屏幕截图,在Photoshop中打开它,裁剪到只是UIPickerView区域,使中心透明,应用任何你想要的色调,将该图像添加到您的项目,并添加为在UIPickerView之上的UIImageView。

你也可以掩盖组件。 有一点烦躁,你可以得到组件的大小,并用下面的代码把它剪掉:

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> 

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

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

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

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

隐藏其他每个子视图(索引1,4和7)隐藏组件上的不透明背景。 给我一个很好的效果,我可以皮肤,我的愿望。

希望能帮助别人:)

我相信这篇文章也会有所帮助。

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

 [(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]; } 

你也许可以inheritance这个select器来更有效地做这个,但是我更喜欢避免子类化。

哦,这也许是显而易见的,但是如果你的select器没有任何项目,上面的代码不会删除子视图。

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

 #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; 

这个答案适用于任何尺寸的select器B / C层的尺寸是在飞行计算。

在这里输入图像描述

您可以通过使用GitHub上提供的 IXPickerOverlayView完全replace背景图像来更改背景颜色(回购包含使用此类的说明示例)。

请注意,您必须自己从头开始绘制(矩形)背景,但与此处提及的任何解决方法不同,此方法是完全dynamic的:即使您在运行时更改了拾取器轮的数量及其大小(就像UIDatePicker在更改系统区域设置时所做的那样)。

获得背景图像后,使用IXPickerOverlayView就像在拾取器视图之上添加IXPickerOverlayView实例并分配hostPickerView属性一样简单。

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

您可以执行以下操作:

通过向导或代码设置select器视图的背景颜色如下:

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

为select器视图子视图编号0,1和3设置阿尔法值(不知道为什么有子视图2思想)。 如下所示,在选取器视图的第一个加载数据之后按代码执行(如果在DidViewLoad中执行此操作,将会引发exception)。

 [(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方法中select器视图的标签的背景颜色。

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

只需将此行添加到其中一个UIPickerView方法即可:

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