Как изменить цвет текста в UIPickerView под iOS 7?
Я в курсе pickerView:viewForRow:forComponent:reusingView
методом, но при использовании view
он проходит в reusingView:
Как изменить его, чтобы использовать другой цвет текста? Если я использую view.backgroundColor = [UIColor whiteColor];
ни один из видов не появляется больше.
7 ответов:
в методе делегата есть более элегантная функция:
Цель-C:
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component { NSString *title = @"sample title"; NSAttributedString *attString = [[NSAttributedString alloc] initWithString:title attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; return attString; }
если вы хотите изменить цвета панели выбора, я обнаружил, что мне пришлось добавить 2 отдельных
UIViews
к виду, содержащемуUIPickerView
, расположенных на расстоянии 35 оч даже на высоте комплектовщик на 180.Swift 3:
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { let string = "myString" return NSAttributedString(string: string, attributes: [NSForegroundColorAttributeName:UIColor.white]) }
Swift 4:
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { let string = "myString" return NSAttributedString(string: string, attributes: [NSAttributedStringKey.foregroundColor: UIColor.white]) }
Swift 4.2:
func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { let string = "myString" return NSAttributedString(string: string, attributes: [NSAttributedString.key.foregroundColor: UIColor.white]) }
помните, когда вы используете метод: вам не нужно реализовывать
titleForRowInComponent()
как это никогда не называется при использованииattributedTitleForRow()
.
Оригинальный пост здесь: могу ли я изменить цвет шрифта datePicker в iOS7?
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 44)]; label.backgroundColor = [UIColor grayColor]; label.textColor = [UIColor whiteColor]; label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18]; label.text = [NSString stringWithFormat:@" %d", row+1]; return label; } // number Of Components - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } // number Of Rows In Component - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component { return 6; }
- перейти к раскадровке
- Выберите PickerView
- перейти к Identity inspector (3-я вкладка)
- Добавить Пользовательский Атрибут Времени Выполнения
- KeyPath = textColor
- Type = Color
- Value = [цвет по вашему выбору]
в Xamarin переопределите метод Uipickermodelview GetAttributedTitle
public override NSAttributedString GetAttributedTitle(UIPickerView picker, nint row, nint component) { // change text white string title = GetTitle (picker, row, component); // get current text from UIPickerViewModel::GetTitle NSAttributedString ns = new NSAttributedString (title, null, UIColor.White); // null = font, use current font return ns; }
я столкнулся с той же проблемой с pickerView С помощью двух компонентов. Мое решение аналогично выше с несколькими изменениями. Поскольку я использую два компонента, необходимо вытащить из двух разных массивов.
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ UILabel *label = [[UILabel alloc] init]; label.backgroundColor = [UIColor blueColor]; label.textColor = [UIColor whiteColor]; label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18]; //WithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 60)]; if(component == 0) { label.text = [countryArray objectAtIndex:row]; } else { label.text = [cityArray objectAtIndex:row]; } return label; }
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel* pickerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 37)]; pickerLabel.text = @"text"; pickerLabel.textColor = [UIColor redColor]; return pickerLabel; }
Swift 4 (обновление до принятого ответа)
extension MyViewController: UIPickerViewDelegate{ } func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { return NSAttributedString(string: "your-title-goes-here", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white]) } }