установить компонент UIPickerView в качестве разделителя

#ios #objective-c #uipickerview #uipickerviewdatasource

#iOS #objective-c #uipickerview #uipickerviewdatasource

Вопрос:

Я создал десятичное число UIPickerView . Я хочу, чтобы второй компонент, который представляет собой просто постоянную строку с точками (.), стал разделителем, я имею в виду :

1) Он не перемещается

2) Его ширина меньше, чем у других компонентов

3) Его цвет отличается по сравнению с другими компонентами

введите описание изображения здесь

Вот код:

 #pragma mark - UIPickerView : Datasource Protocol
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 3;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {    if(component == 2)
        return 10;
    if(component == 1)
        return 1;
    else
        return 1000;
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if(component == 1)
        return @".";
    else
        return [NSString stringWithFormat:@"%ld", (long)row];

}
  

Как я могу это сделать?

Комментарии:

1. Возможно, вы захотите создать подкласс представления выбора и добавить точечный вид (возможно, метку) в качестве подвида. Я бы разместил его — и вывел его на передний план — в переопределенном layoutSubviews методе.

2. Попробуйте использовать 2 компонента UIPickerView и добавьте UILabel над этим UIPickerView .

Ответ №1:

Вы можете взять a UILable и задать текст как «.» (т.Е. Точка), добавить метку в окне выбора. Затем возьмите 3 компонента в соответствующем делегате и для второго компонента верните nil.

Вот код :

В вашем методе проектирования я сделал это в viewDidLoad

 myPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 200, 320, 200)];
myPickerView.delegate = self;
myPickerView.showsSelectionIndicator = YES;
[self.view addSubview:myPickerView];

label = [[UILabel alloc] initWithFrame:CGRectMake(145, 76, 36, 36)];
label.font = [UIFont boldSystemFontOfSize:40];
label.layer.cornerRadius = 18.0;
label.layer.masksToBounds = YES;
label.text = @".";
[label setTextColor:[UIColor darkGrayColor]];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = NSTextAlignmentCenter;
label.shadowColor = [UIColor whiteColor];
label.shadowOffset = CGSizeMake (0,1);
[myPickerView addSubview:label];
  

Тогда в делегате было бы так

 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 3;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (component ==0) {
        return self.arrItemsTop.count;
    }else if (component == 1){
        return 0;
    }else
        return self.arrItemsOther.count;

}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

    if (component == 0) {
        return self.arrItemsTop[row];
    }
    else if (component == 1){
        return nil;
    }
    else{
        return self.arrItemsOther[row];
    }
}
  

ПРИМЕЧАНИЕ: arrItemsTop содержит ли массив значения с левой стороны и arrItemsOthers содержит ли массив значение с правой стороны

Вывод :

введите описание изображения здесь

Надеюсь, это поможет..

Счастливого кодирования.

Комментарии:

1. как сделать то же самое, что и цепной ролик или тип колеса?, мне нужен как DatePicker. [использование swift]