18

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

谢谢。

4

9 回答 9

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>
于 2012-01-04T15:42:09.163 回答
18

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

于 2009-06-08T15:21:47.327 回答
14

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

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

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

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

隐藏每隔三个其他子视图(索引 1、4 和 7)隐藏组件上的不透明背景。产生非常好的效果,我可以随心所欲地剥皮。

希望对某人有所帮助:)

于 2009-09-04T10:45:15.443 回答
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];
}

您可能可以将选择器子类化以更有效地执行此操作,但我更喜欢避免子类化。

哦,同样,这可能很明显,但如果你的选择器中没有任何项目,上面的代码不会删除子视图。

于 2012-03-09T18:26:08.167 回答
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,图层尺寸是即时计算的。

                                                                 在此处输入图像描述

于 2013-06-15T10:55:38.923 回答
2

IXPickerOverlayView 您可以通过使用GitHub 上的可用选项将背景图像完全替换为您选择的一个来更改背景颜色(repo 包含使用此类的说明性示例)。

请注意,您必须自己从头开始绘制(矩形)背景,但与此处提到的任何解决方法不同,此方法是完全动态的:即使您在运行时更改选择轮的数量及其大小,控件也会正确显示(就像 UIDatePicker 在您更改系统区域设置时所做的那样)。

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

于 2012-05-03T13:52:47.297 回答
1

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

于 2009-12-15T13:29:25.463 回答
0

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

[[[MyPicker subviews] objectAtIndex:4] setBackgroundColor: [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]]];
于 2012-08-04T09:03:48.867 回答
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
于 2013-09-27T15:06:02.460 回答