iOS 7에서 UIPickerView의 텍스트 색상을 어떻게 변경합니까?


117

나는 알고 있어요 pickerView:viewForRow:forComponent:reusingView방법 만 사용하는 경우 view가에 전달을 reusingView:어떻게하면 다른 텍스트 색상을 사용하여 변경합니까? 사용 view.backgroundColor = [UIColor whiteColor];하면 뷰가 더 이상 표시되지 않습니다.



2
@AaronBrager. Que 복제되지 않음 u가 제공 한 링크는이 que 다음에 요청됩니다.
Gajendra K Chauhan 2015 년

답변:


323

대리자 메서드에는 더 우아한 함수가 있습니다.

목표 -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에 대해 35pt 간격으로을 UIViews포함하는 뷰에 2 개를 추가해야한다는 것을 알았습니다 UIPickerView.

스위프트 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. Identity inspector (세 번째 탭)로 이동
  4. 사용자 정의 런타임 속성 추가
  5. KeyPath = textColor
  6. 유형 = 색상
  7. 값 = [선택한 색상]

스크린 샷


귀하의 답변을 설명하십시오
Gwenc37 2014 년

11
그것은 반으로 작동하고 cus 텍스트는 검은 색이지만 피커에서 스크롤하면 흰색으로
바뀝니다

4
스크롤하는 경우에만 작동합니다
Chris Van Buskirk 2015 년

안녕하세요 @ chris-van-buskirk 내 애드온 확인 [_thePrettyPicker selectRow : prettyIndex inComponent : 0 animated : YES];
WINSergey

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

5

그것은 나를 위해 작동합니다

pickerView.setValue(UIColor.yellow, forKeyPath: "textColor")

저도 도왔습니다 ..
Ripa Saha

2

두 가지 구성 요소를 사용 하는 pickerView 와 동일한 문제가 발생했습니다 . 내 솔루션은 몇 가지 수정 사항으로 위와 유사합니다. 두 개의 구성 요소를 사용하고 있기 때문에 두 개의 다른 배열에서 가져와야합니다.

- (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.