我正在开发一个iPhone应用程序。在哪里,我想在图像中有UIPickerView
。是否可以像这样更改UIPickerView
的外观?!请指导我这样做!!我在没有XIB的情况下创建它。
或者有没有办法让UIPickerView
皮肤透明?
提前致谢!! : - )
答案 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。可能不是你想要的,但也可能有所帮助:)