我想更改 UIPickerView 的边框颜色。我没有看到 UIPickerView 的 tint 属性。有什么办法可以做到吗?还是解决方法?
谢谢。
您还可以屏蔽组件。稍微摆弄一下,您可以获得组件的大小并使用以下代码将其剪切出来:
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>
如果您只是想要一种解决方法,请在模拟器中截屏,在 photoshop 中打开它,将其裁剪到 UIPickerView 区域,使中心透明,应用您想要的任何色调,将该图像添加到您的项目中,并将其添加为UIPickerView 之上的 UIImageView。
我的 UIPickerView 有 3 个组件。并且没有选择指标。
这给了它 11 个子视图。[[picker subviews] count]
隐藏第一个和最后一个子视图会完全移除背景。
[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];
隐藏每隔三个其他子视图(索引 1、4 和 7)隐藏组件上的不透明背景。产生非常好的效果,我可以随心所欲地剥皮。
希望对某人有所帮助:)
选择器在完全加载之前不会有子视图。如果您尝试这样做:
[(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];
}
您可能可以将选择器子类化以更有效地执行此操作,但我更喜欢避免子类化。
哦,同样,这可能很明显,但如果你的选择器中没有任何项目,上面的代码不会删除子视图。
这是带有@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,图层尺寸是即时计算的。
IXPickerOverlayView
您可以通过使用GitHub 上的可用选项将背景图像完全替换为您选择的一个来更改背景颜色(repo 包含使用此类的说明性示例)。
请注意,您必须自己从头开始绘制(矩形)背景,但与此处提到的任何解决方法不同,此方法是完全动态的:即使您在运行时更改选择轮的数量及其大小,控件也会正确显示(就像 UIDatePicker 在您更改系统区域设置时所做的那样)。
获得背景图像后,使用就像在 Picker 视图顶部IXPickerOverlayView
添加实例并分配属性一样简单。IXPickerOverlayView
hostPickerView
实际上,为了纠正您,您实际上可以在 UIPickerview 上放置一个 .png 并仍然使用 Picker 视图,只需确保中间是透明的,否则您将看不到行。
只需将此行添加到您的UIPickerView
方法之一:
[[[MyPicker subviews] objectAtIndex:4] setBackgroundColor: [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]]];
您可以执行以下操作:
通过向导或代码设置选择器视图背景颜色,如下所示:
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