一段时间以来,当您使用pickerView:viewForRow:forComponent:reusingView:
委托时,我一直在尝试删除UIPickerView中的蓝色突出显示。
我相信很多人都去过那里,想要在UIPickerView中删除那个丑陋的蓝色高光。
UIPickerView
有一个UITableView
- 而不是UIPickerTable
里面有一个单元格,其中包含UILabels/UIViews/UIImageViews
或其他任何内容。
从逻辑上讲,如果它是一个tableview,那么我们可以访问单元格并setSelectionStyle:UITableViewCellSelectionStyleNone
对吗?
错误。
UIPickerTable
是API的私有类,不允许您在其中设置任何内容。
我设法在我的选择器中获取所有子视图
[[myPickerView subviews] objectAtIndex:someIndexValue];
所以我在pickerView:didSelectRow:
和pickerView:viewForRow:
中尝试了此操作
NSIndexPath *path = [[[myPickerView subviews] objectAtIndex:5] indexPathForSelectedRow];
[[[[myPickerView subviews] objectAtIndex:5] cellForRowAtIndexPath:path] setSelectionStyle:UITableViewCellSelectionStyleNone];
还有这个:
[[[myPickerView subviews] objectAtIndex:5] setSelectionStyle:UITableViewCellSelectionStyleNone];
他们都没有工作'因为它是私人的。给我这个错误:
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UIPickerTable setSelectionStyle:]:无法识别的选择器发送到实例0x64479a0'*
我知道将view
的框架设置为pickerView:rowHeightForComponent:
的大小然后执行:
label.UserInteractionEnabled = YES;
在以pickerView:viewForRow
方法返回之前。
但它并没有真正删除突出显示,只是涵盖它并删除了UIPickerView在单击某个项目时自动滚动的功能。
是否有人知道如何从UIPickerView
内部UILabel/UIView/UIImageView
删除此蓝色突出显示?
我不谈论selectionIndicator。 这是您在pickerView中单击图像时出现的突出显示:
PS:这个pickerView没有selectionIndicator并且是自定义的。但是,定制与问题无关。这个问题仅仅是因为有一个对象在选择器的单元格中继承了UIView,并且正在使用viewForRow
。