使用图像自定义UIPickerView的皮肤

Nin*_*ina 7 iphone objective-c uipickerview

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

还是有办法让UIPickerView皮肤透明吗?

示例UIPickerView图像

提前致谢!!:-)

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

现在添加一个UILabel正确UIPickerViewselectionIndicator,并label用作selectionIndicator.你可以用自己的方式管理它.

谢谢!


Mar*_*l W 7

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.