Làm cách nào để thay đổi màu của văn bản trong UIPickerView trong iOS 7?


117

Tôi nhận thức được pickerView:viewForRow:forComponent:reusingViewphương pháp, nhưng khi sử dụng viewnó đi trong reusingView:làm thế nào để thay đổi nó để sử dụng một màu chữ khác nhau? Nếu tôi sử dụng view.backgroundColor = [UIColor whiteColor];không có chế độ xem nào hiển thị nữa.



2
@AaronBrager. Que Không trùng lặp liên kết do u cung cấp được hỏi sau hàng đợi này.
Gajendra K Chauhan

Câu trả lời:


323

Có một hàm trong phương thức ủy nhiệm thanh lịch hơn:

Mục tiêu-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;
}

Nếu bạn cũng muốn thay đổi màu sắc của thanh lựa chọn, tôi thấy rằng tôi phải thêm 2 thanh riêng biệt UIViewsvào dạng xem có chứa UIPickerView, cách nhau 35 điểm, cách nhau 35 điểm cho chiều cao bộ chọn là 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])
}

Hãy nhớ khi bạn sử dụng phương thức: Bạn không cần phải triển khai titleForRowInComponent()vì nó không bao giờ được gọi khi sử dụng attributedTitleForRow().


Cho đến nay, đây là câu trả lời tốt nhất vì nó cũng hoạt động cho các chế độ xem bộ chọn có nhiều hơn một thành phần.
PKCLsoft

29

Bài gốc ở đây: tôi có thể thay đổi màu phông chữ của datePicker trong iOS7 không?

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

Giải pháp này hoạt động tốt cho một chế độ xem có chứa một thành phần duy nhất. Nếu bạn có nhiều hơn 1, các nhãn sẽ trùng lặp với những gì tôi có thể thấy.
PKCLsoft

23
  1. Đi tới bảng phân cảnh
  2. Chọn PickerView
  3. Chuyển đến Trình kiểm tra danh tính (tab thứ 3)
  4. Thêm thuộc tính thời gian chạy do người dùng xác định
  5. KeyPath = textColor
  6. Loại = Màu
  7. Giá trị = [Màu bạn chọn]

ảnh chụp màn hình


Vui lòng giải thích câu trả lời của bạn
Gwenc37

11
nó làm việc trong một nửa, văn bản cus là màu đen nhưng khi u di chuyển nó trên bảng chọn ông thay đổi sang màu trắng
Shial

4
Chỉ hoạt động nếu bạn di chuyển
Chris Van Buskirk

Xin chào @ chris-van-buskirk Kiểm tra tiện ích bổ sung của tôi [_thePrettyPicker selectRow: prettyIndex inComponent: 0 animation: YES];
CHIẾN THẮNG

7

trong Xamarin, ghi đè phương thức 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

Tôi đã gặp phải vấn đề tương tự với một PickerView sử dụng hai thành phần. Giải pháp của tôi tương tự như trên với một vài sửa đổi. Vì tôi đang sử dụng hai thành phần nên cần phải kéo từ hai mảng khác nhau.

- (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 (Cập nhật câu trả lời được chấp nhận)

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.