更改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"]]];