我想更改UIPickerView的边框颜色。我没有看到UIPickerView的色调属性。有什么办法可以做到吗?或者解决方法?
感谢。
答案 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,图层尺寸是即时计算的。
答案 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