使用图像自定义UIPickerView皮肤

时间:2012-07-12 11:27:41

标签: iphone objective-c uipickerview

我正在开发一个iPhone应用程序。在哪里,我想在图像中有UIPickerView。是否可以像这样更改UIPickerView的外观?!请指导我这样做!!我在没有XIB的情况下创建它。

或者有没有办法让UIPickerView皮肤透明?

Sample UIPickerView Image

提前致谢!! : - )

4 个答案:

答案 0 :(得分:9)

我不知道这是否正确但您可以设置UIPickerView背景图片...我已经完成了一次。

见: -

//Make a view to set as background of UIPickerView
UIView * viewForPickerView = [[UIView alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 216.0)];
[viewForPickerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"pickerViewBackground.png"]]];

[[[pickerView subviews]objectAtIndex:2] addSubview: viewForPickerView];

//UIPickerView has 8 subviews like, background, rows, container etc.
// hide unnecessary subview

[(UIView*)[[pickerView subviews] objectAtIndex:3] setHidden:YES];
[(UIView*)[[pickerView subviews] objectAtIndex:5] setHidden:YES];
[(UIView*)[[pickerView subviews] objectAtIndex:6] setHidden:YES];
[(UIView*)[[pickerView subviews] objectAtIndex:7] setHidden:YES];
[(UIView*)[[pickerView subviews] objectAtIndex:8] setHidden:YES];

现在只在UILabel UIPickerView上添加selectionIndicator,并使用 label 作为 {{1} }} 即可。 你可以用自己的方式管理它。

谢谢!

答案 1 :(得分:6)

UIPickerView只不过是一个带有一个或多个UITableViews以及背景和选择器视图的UIView。

当Apple决定以另一种方式实现它时,隐藏和添加UIPicker视图的视图可能会破坏您的代码。

使用UITableView和您自己的自定义背景和选择器视图实现控件可能更好。

在UITableView上实现UIPickerView行为的一些技巧:

  • 使用ContentInset确保第一行/最后一行显示在 滚动到顶部/底部的中间。

  • 在UITableViewSource实现tableView:didSelectRowAtIndexPath:并在UITableView上调用scrollToRowAtIndexPath以显示中间的选定行。

  • 在UITableViewSource上实现scrollViewDidEndDecelerating和scrollViewDidEndDragging(其中willDecelerate为false)。检测最接近中间的行,将该行设置为选中,并使用UITableView上的selectRowAtIndexPath将该行滚动到中间(或者当已选择行时使用scrollToRowAtIndexPath)。

  • 在selectRowAtIndexPath和scrollToRowAtIndexPath中,将atScrollPosition设置为 TOP 。这有点令人困惑,因为行显示在中间,但ContentInset将顶部推到视图的中间。

  • 您可以使用visibleCells和contentOffset的帧检测UITableView上最靠近中间的行。可以通过将相同的索引应用于indexPathsForVisibleRows来找到该行的NSIndexPath。

答案 2 :(得分:1)

不幸的是UIPickerView不是高度可定制的,因此您可能最终使用私有标头来修改外观(不推荐)或使用某些模拟UIPickerView行为但允许自定义的第三方库。

答案 3 :(得分:0)

看看these。可能不是你想要的,但也可能有所帮助:)