开发一个应用程序,显示具有以下值的选择器: 1.Morning 2.Noon 3.Evening
根据当前时间我需要显示各自的值。
如果它的3PM使用应该只能选择晚上。现在我的问题是,有什么方法可以让“早晨和中午”无法选择。类似于日期选择器,我可以灰色选项??用户应该知道所有选项,但他应该能够根据时间选择选项。
提前感谢。
答案 0 :(得分:2)
如果要在选择器视图中显示某些值,请使用以下委托API覆盖该位置的视图。
- (UIView *)viewForRow:(NSInteger)row forComponent:(NSInteger)component
创建UILabel并将其文本颜色设置为灰色并将其作为上面的视图返回。
如果选择了灰色文本,请通过调用以下API为默认选择设置动画。
- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;
希望这有帮助。
答案 1 :(得分:0)
要使选择器中的行变灰,比创建自己的视图要容易得多。那就是使用attributedTitleForRow。
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?
因为如果返回nil,此函数将退回到titleForRow,因此可以为禁用的行返回灰色,并使用标准的titleForRow返回其余部分。例如:
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
// Need to provide the below function isRowDisabled that returns true as needed
if isRowDisabled(row:row) {
let attributes = [NSAttributedStringKey.foregroundColor: UIColor.gray]
let str = NSAttributedString(string: "my gray text on row \(row)", attributes:attributes)
return str
} else {
return nil
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return "my normal text on row \(row)"
}
然后,您必须忽略其他答复中提到的禁用行的didSelectRow。