2017-08-31 83 views
0

,我得到某事像這樣:儘管據說指示燈始終顯示自ios7 UIPickerView ShowsSelectionIndicator不起作用

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

能否請您與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; 
} 
+0

,因爲我不是迅速的傢伙試試,你可以得到這個方法pickerView的迅猛版本( _:viewForRow:forComponent:複用:) 方法提供組件行的內容。我發佈了這個Swift和ObjC在理解上非常相似 –