У меня есть следующий код для создания UIPickerView:
pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0f, 416.0f - height, 320.0f, height)];
pickerView.delegate = self;
pickerView.showsSelectionIndicator = YES;
[pickerView setSoundsEnabled:YES];
Я хотел бы изменить ширину компонентов и размер текста в каждом компоненте. Можно ли это сделать?
Спасибо!





Вы можете изменить ширину с помощью соответствующего метода делегата
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
switch(component) {
case 0: return 22;
case 1: return 44;
case 2: return 88;
default: return 22;
}
//NOT REACHED
return 22;
}
Что касается настраиваемого размера текста, вы можете использовать делегата для возврата настраиваемых представлений с текстом любого размера, который вы хотите:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel *retval = (id)view;
if (!retval) {
retval= [[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)] autorelease];
}
retval.text = @"Demo";
retval.font = [UIFont systemFontOfSize:22];
return retval;
}
Конечно, вам нужно будет изменить их, чтобы они имели подходящие значения для вашего приложения, но это должно привести вас туда, куда вам нужно.
Спасибо, я внесу соответствующие изменения, хотя и не совсем то, что вы предлагаете. Я собираюсь использовать идентификатор, в основном потому, что он короче, и вы ничего не теряете, потому что lval выражения уже введено в UIView.
Я также хочу добавить эту строку к ответу на случай, если вы работаете с массивом для заполнения средства выбора (скорее всего). Вместо retval.text = @ "Demo" замените на retval.text = [messageArray objectAtIndex: row];
Пара ошибок во втором блоке кода: - UIView необходимо преобразовать в (UILabel *). - В строке назначения retval отсутствует открывающая скобка, и ей необходимо вызвать initWithFrame, иначе мы ничего не получим: т.е. retval = [[[UILabel alloc] initWithFrame: CGRectMake (0.0f, 0.0f, [pickerView rowSizeForComponent: component] .width, [pickerView rowSizeForComponent: component] .height)] autorelease];