UIPickerView ShowsSelectionIndicator不起作用

时间:2017-08-31 12:33:42

标签: ios swift3 uipickerview

尽管据说指标始终显示自ios7以来,我得到的是这样的:

enter image description here

这是我的实施:

class TimePicker: UIPickerView {

    override func awakeFromNib() {
        self.delegate = self
        self.dataSource = self
        self.showsSelectionIndicator = true
    }

}

extension TimePicker: UIPickerViewDelegate {
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        let minutes = [0,1,2,3,4,5,6,7,8,9,10]
        let seconds = [0,5,10,15,20,25,30,35,40,45,50,55]
        switch component {
        case 0: return minutes[row].description
        default: return seconds[row].description
        }
    }
}

extension TimePicker: UIPickerViewDataSource {

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 2
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        switch component {
        case 0:
            return 11
        default:
            return 12

        }
    }
}

指针未显示的代码有什么问题,这看起来真的很糟糕?

1 个答案:

答案 0 :(得分:-1)

你可以尝试使用UIPickerViewDelegate的其他替代委托方法来配置组件中行的视图,即

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel* label = nil;
if (view == nil) {
    view = [[UIView alloc] init];
    view.backgroundColor = [UIColor blueColor];
    label = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 60, 22)];

    NSString *rowTextValue;
    switch component {
    case 0: rowTextValue = [Nsstring StringWithFormat:@"%d",minutes[row]]; break;
    default: rowTextValue = [Nsstring StringWithFormat:@"%d", seconds[row]]; break;
    }
    label.text = rowTextValue;
    [view addSubview:label];
}
   if (label == nil) {
    NSLog(@"%@",view.subviews);
    label = view.subviews[0]; // I do get subviews here.
   }
return view;
}