一段时间以来,当您使用
UIPickerView
委托时,我一直在尝试删除 pickerView:viewForRow:forComponent:reusingView:
中的蓝色突出显示。
我相信这里很多人都去过那里,并且想删除
UIPickerView
中那个丑陋的蓝色突出显示。
UIPickerView
有一个UITableView
- 而是一个UIPickerTable
,里面有你的UILabels/UIViews/UIImageViews
或任何东西所在的单元格。
从逻辑上讲,如果它是一个表格视图,那么我们就可以访问单元格和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
中删除这个蓝色突出显示?
我不是谈论选择指示器。 这是当您单击 pickerView 内的图像时出现的突出显示:
PS:这个pickerView没有
selectionIndicator
,是自定义的。然而,定制与这个问题无关。这个问题只是因为在选择器的单元格内有一个继承形式 UIView
的对象并且正在使用 viewForRow
。