Bagaimana cara mengubah warna teks di UIPickerView di iOS 7?


117

Saya mengetahui pickerView:viewForRow:forComponent:reusingViewmetodenya, tetapi ketika menggunakan viewitu lewat reusingView:bagaimana cara mengubahnya untuk menggunakan warna teks yang berbeda? Jika saya menggunakan view.backgroundColor = [UIColor whiteColor];tidak ada tampilan yang muncul lagi.



2
@Aaron. Que Bukan duplikat link yang disediakan oleh u diminta setelah antrian ini.
Gajendra K Chauhan

Jawaban:


323

Ada fungsi dalam metode delegasi yang lebih elegan:

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

Jika Anda ingin mengubah warna bar seleksi juga, saya menemukan bahwa saya harus menambahkan 2 terpisah UIViewske tampilan yang berisi UIPickerView, berjarak 35 poin terpisah untuk ketinggian pemetik 180.

Cepat 3:

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

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

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

Ingat saat Anda menggunakan metode ini: Anda tidak perlu mengimplementasikan titleForRowInComponent()karena tidak pernah dipanggil saat menggunakan attributedTitleForRow().


Sejauh ini, ini adalah jawaban terbaik karena juga berfungsi untuk tampilan pemilih dengan lebih dari satu komponen.
PKCLsoft

29

Posting asli di sini: dapatkah saya mengubah warna font datePicker di 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;
}

Solusi ini berfungsi dengan baik untuk pickerview yang berisi satu komponen. Jika Anda memiliki lebih dari 1, label akan tumpang tindih dari apa yang saya lihat.
PKCLsoft

23
  1. Buka papan cerita
  2. Pilih PickerView
  3. Pergi ke Identity inspector (tab ke-3)
  4. Tambahkan Atribut Waktu Proses yang Ditentukan Pengguna
  5. KeyPath = textColor
  6. Jenis = Warna
  7. Nilai = [Warna pilihan Anda]

tangkapan layar


Tolong jelaskan jawaban Anda
Gwenc37

11
Ini berfungsi dalam setengah, teks karena hitam tetapi ketika Anda menggulirnya pada alat pilih dia berubah menjadi putih
Shial

4
Hanya berfungsi jika Anda menggulir
Chris Van Buskirk

Hai @ chris-van-buskirk Periksa add-on saya [_thePrettyPicker selectRow: prettyIndex inComponent: 0 animasi: YES];
WINSergey

7

di Xamarin, ganti metode 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

Saya mengalami masalah yang sama dengan pickerView menggunakan dua komponen. Solusi saya mirip dengan di atas dengan sedikit modifikasi. Karena saya menggunakan dua komponen, maka perlu menarik dari dua array yang berbeda.

- (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 (Perbarui ke jawaban yang diterima)

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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.