如何更改UIPicker颜色?iPhone

4

我注意到UIPicker始终是黑色的,

有没有办法改变UIPicker和它的选择指示器的颜色?

谢谢你的帮助。

6个回答

8

我假设你只想改变选择器边框的颜色,而不是用户交互的中心区域的颜色。在这种情况下,请执行以下操作:

创建4个“覆盖”UIView并将它们直接添加到UIPicker中,如下所示:

[picker addSubview: coverView];

将这些视图定位在选择器边框的顶部、底部、左侧和右侧。(您需要尝试不同的大小。)将coverViews的backgroundColor设置为所需颜色,并调整alpha以获得从选择器渐变阴影。同样,这可能需要一些实验。
另一种方法是创建一个覆盖整个选择器的大型coverView,并重写- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event方法,以使您的覆盖视图不会拦截用于选择器的触摸事件。

1
不需要使用 hitTest,只需禁用用户交互 (imageView.userInteractionEnabled = NO)。 - Vadim Yelagin

5

@Daniel - 感谢您提供的精彩教程。但是我没有找到任何更改UIPicker颜色的解决方案。 - sagarkothari
FYI,自定义选择器(UICatalog应用程序页面上UISegmentedController的第三个选项)存在一个缺陷:您失去了通过简单触摸来选择选择器中的值的能力。这个问题从一开始就存在,苹果还没有修复它。每当您自定义选择器内部的视图时,它都会发生。 - Amagrammer
@Amagrammer 我认为这不是一个问题。如果您自定义视图,逻辑方法是您控制自定义视图上的触摸操作。将您的视图设置为选定行的控件非常容易实现。 - Gabriel

4

按照Amagrammer的建议,创建一个单一的覆盖图像,但不是将其作为图像添加到视图中,而是将其作为按钮添加。然后禁用按钮的交互,选择器将接收触摸事件,无需拦截或覆盖任何内容。


1

您可以通过添加5个ImageView来实现这一点。第一个是“选择指示器”的大小,并将其放置在“选择指示器”正上方。现在将该imageView的alpha更改为0.2或您想要的任何值,并根据您的选择添加图像/颜色。现在,您将看到自定义的“选择指示器”。同样的事情也适用于边框。将每个imageView添加到pickerview的四个侧面,并使其大小等于边框大小。现在填充您想要的图像/颜色。


0
你需要创建一个包含UIImageView的新UIView,然后将其设置为单元格的附件。因此,你需要创建一张类似于默认附件的图片,但颜色是你想要的。
UIView* accessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 24, 50)];
UIImageView* accessoryViewImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NEWIMAGE.png"]];
accessoryViewImage.center = CGPointMake(12, 25);
[accessoryView addSubview:accessoryViewImage];
[cell setAccessoryView:accessoryView];
[accessoryViewImage release];
[accessoryView release];

如果想要改变文本颜色,这里有解决方案

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {

CGRect imageFrame = CGRectMake(0.0, 0.0, 15, 15);
UIImageView *label = [[[UIImageView alloc] initWithFrame:imageFrame] **autorelease**];

if (row == 0)
{
    label.backgroundColor = [UIColor redColor];
}
if (row == 1)
{
    label.backgroundColor = [UIColor blueColor];
}
if (row == 2)
{
    label.backgroundColor = [UIColor blackColor];
}   
return label;
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接