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.

Doug Smith
sumber
kemungkinan duplikat dari bisakah saya mengubah warna font datePicker di iOS7?
Aaron Brager
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().

Jon
sumber
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;
}
Bordz
sumber
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

Lancewise
sumber
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;
}
Matt
sumber
5

Ini berhasil untuk saya

pickerView.setValue(UIColor.yellow, forKeyPath: "textColor")
logeshpalani98
sumber
membantu saya juga ..
Ripa Saha
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;
}
R Thomas
sumber
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])
    }
}
harsh_v
sumber
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;
}
Polisi
sumber