我想要更改UIPickerView的边框颜色。我没有看到UIPickerView的色调属性。有什么方法可以实现这个功能吗?或者说有没有其他解决方案?
谢谢。
我想要更改UIPickerView的边框颜色。我没有看到UIPickerView的色调属性。有什么方法可以实现这个功能吗?或者说有没有其他解决方案?
谢谢。
您还可以遮蔽组件。通过一些操作,您可以使用以下代码获取组件的大小并将其裁剪:
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区域,使中心透明,应用所需的色调,将该图像添加到你的项目中,并作为UIImageView添加到UIPickerView上方。
我的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的答案,因为有些问题永远不会过时:
#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;
这个答案适用于任何大小的选择器,因为图层尺寸是即时计算的。
IXPickerOverlayView
就像在Picker视图上方添加一个IXPickerOverlayView
实例并分配hostPickerView
属性一样简单。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