Comment changer la couleur du texte dans un UIPickerView sous iOS 7?

je suis au courant de la méthode pickerView:viewForRow:forComponent:reusingView , mais en utilisant le view il passe dans reusingView: Comment puis-je le changer pour utiliser une couleur de texte différente? Si j'utilise view.backgroundColor = [UIColor whiteColor]; aucune des vues n'apparaît plus.

103
demandé sur Doug Smith 2013-10-07 23:19:40

7 réponses

il y a une fonction dans la méthode delegate qui est plus élégante:

Objectif-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;
}

si vous voulez changer les couleurs de la barre de sélection aussi bien, j'ai trouvé que j'ai dû ajouter 2 séparé UIViews à la vue contenant le UIPickerView , espacés de 35 pts pour une hauteur de picker de 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])
}

rappelez-vous quand vous utilisez la méthode: vous n'avez pas besoin de mettre en œuvre titleForRowInComponent() comme il n'est jamais appelé en utilisant attributedTitleForRow() .

286
répondu Jon 2018-07-16 18:20:18

message Original ici: puis-je changer la couleur de la police de la datePicker dans 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;
}
26
répondu Bordz 2018-07-17 01:44:07
  1. Aller au storyboard
  2. Sélectionnez PickerView
  3. aller à L'Inspecteur D'identité (3e onglet)
  4. Ajouter L'Attribut Runtime Défini Par L'Utilisateur
  5. chemin d'accès clé = textColor
  6. Type = Couleur
  7. valeur = [Couleur de votre choix]

screenshot

20
répondu Lancewise 2018-07-17 01:37:24

dans Xamarin, remplacer la UIPickerModelView méthode 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;
}
7
répondu Matt 2015-05-16 14:51:47

j'ai rencontré le même problème avec un pickerView en utilisant deux composants. Ma solution est similaire à ci-dessus avec quelques modifications. Parce que j'utilise deux composants, il est nécessaire de tirer à partir de deux tableaux différents.

- (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;
}
3
répondu R Thomas 2014-03-23 21:44:36
- (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;
}
1
répondu Bobby 2016-12-23 05:33:45

Swift 4 (Mise à jour de la réponse acceptée)

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])
    }
}
1
répondu harsh_v 2018-07-17 01:37:56