更改UIPickerView背景

los*_*sit 18 iphone uipickerview

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

谢谢.

Luk*_*kas 27

您还可以屏蔽组件.有点fiddeling你可以获得组件的大小,并使用以下代码将其删除:

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];
Run Code Online (Sandbox Code Playgroud)

别忘了

#import <QuartzCore/QuartzCore.h>
Run Code Online (Sandbox Code Playgroud)

  • 在XCode 4+中,你需要框架:[mask setFrame:CGRectMake(10.0f,10.0f,260.0f,196.0f)] ;,但是非常有用,并且不需要使用图像叠加. (5认同)

Ed *_*rty 18

如果你只想要一个解决方法,在模拟器中拍摄一个屏幕截图,在photoshop中打开它,将其裁剪到UIPickerView区域,使中心透明,应用你想要的任何色调,将该图像添加到项目中,并将其添加为UIPmageView顶部的UIImageView.

  • @anka你提供的链接不起作用 (2认同)

ada*_*dam 14

我的UIPickerView有3个组件.没有选择指标.

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

隐藏第一个和最后一个子视图完全删除了背景.

[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];
Run Code Online (Sandbox Code Playgroud)

隐藏每三个其他子视图(索引1,4和7)会隐藏组件上的不透明背景.给我一个很好的效果,我可以按照我的意愿去皮肤.

希望有人帮助:)

  • 选择器在完全加载之前不会有子视图.如果您尝试在viewDidLoad或viewWillAppear中执行此操作,它将无法正常工作.但是,我将我的一个UIPickerView协议方法移动到了它.-(NSString*)pickerView:(UIPickerView*)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {. (6认同)

Mat*_*son 5

选择器在完全加载之前不会有子视图.如果您尝试这样做:

[(UIView*)[[picker subviews] objectAtIndex:0] setHidden:YES];
[(UIView*)[[picker subviews] objectAtIndex:10] setHidden:YES];
Run Code Online (Sandbox Code Playgroud)

在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];
}
Run Code Online (Sandbox Code Playgroud)

您可以将选择器子类化为更有效地执行此操作,但我更愿意避免子类化.

哦,这也许是显而易见的,但是如果您的选择器中没有任何项目,则上面的代码不会删除子视图.