iOS 7でUIPickerViewのテキストの色を変更するにはどうすればよいですか?


117

私はpickerView:viewForRow:forComponent:reusingView方法を知っていviewますが、reusingView:それを使用するときに別のテキストの色を使用するように変更するにはどうすればよいですか?使用するview.backgroundColor = [UIColor whiteColor];と、ビューが表示されなくなります。



2
@AaronBrager。Que uによって提供されたリンクが重複していない場合、このqueの後に尋ねられます。
Gajendra K Chauhan 2015

回答:


323

delegateメソッドには、よりエレガントな関数があります。

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

選択バーの色も変更したい場合は、ピッカーの高さを180にするにUIViewsUIPickerView、を含むビューに2つのセパレートを35ポイント間隔で追加する必要があることがわかりました。

スウィフト3:

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {

    let string = "myString"
    return NSAttributedString(string: string, attributes: [NSForegroundColorAttributeName:UIColor.white])
}

スウィフト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()


これは、複数のコンポーネントを持つピッカービューでも機能するので、これが最善の答えです。
PKCLsoft 2014

29

ここの元の投稿:iOS7でdatePickerのフォント色を変更できますか?

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

このソリューションは、単一のコンポーネントを含むピッカービューで正常に機能します。1つ以上ある場合、ラベルは私が見ることができるものと重複します。
PKCLsoft 2014

23
  1. ストーリーボードに移動
  2. PickerViewを選択します
  3. IDインスペクターに移動(3番目のタブ)
  4. ユーザー定義のランタイム属性を追加
  5. KeyPath = textColor
  6. タイプ=色
  7. 値= [選択した色]

スクリーンショット


回答を説明してください
Gwenc37

11
それは半分で動作し、cusテキストは黒ですが、ピッカーでスクロールすると白に変わります
Shial

4
スクロールした場合にのみ機能します
Chris Van Buskirk、2015年

こんにちは@ chris-van-buskirkアドオンをチェックしてください[_thePrettyPicker selectRow:prettyIndex inComponent:0 animated:YES];
WINSergey 2016年

7

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


2

2つのコンポーネントを使用するpickerViewで同じ問題が発生しました。私の解決策は上記に似ていますが、いくつか変更があります。2つのコンポーネントを使用しているため、2つの異なるアレイからプルする必要があります。

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

2

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])
    }
}

1
- (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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.