मैं iOS 7 के तहत UIPickerView में टेक्स्ट का रंग कैसे बदल सकता हूं?


117

मुझे इस pickerView:viewForRow:forComponent:reusingViewविधि के बारे में पता है , लेकिन viewइसका उपयोग reusingView:करते समय मैं एक अलग पाठ रंग का उपयोग करने के लिए इसे कैसे बदलूं? अगर मैं किसी view.backgroundColor = [UIColor whiteColor];भी दृश्य का उपयोग नहीं करता हूं।



2
@AaronBrager। क्यू नहीं एक डुप्लिकेट इस पंक्ति के बाद यू द्वारा प्रदान लिंक से पूछा जाता है।
गजेंद्र के चौहान

जवाबों:


323

प्रतिनिधि विधि में एक समारोह है जो अधिक सुरुचिपूर्ण है:

उद्देश्य सी:

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

यदि आप चयन बार के रंगों को भी बदलना चाहते हैं, तो मैंने पाया कि मुझे अलग-अलग UIViewsदेखने के लिए 2 अलग-अलग जोड़ना पड़ा UIPickerView, 180 के बीनने की ऊँचाई के लिए 35 pts के अलावा स्थान दिया।

स्विफ्ट 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])
}

स्विफ्ट 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

29

मूल पोस्ट यहां: क्या मैं 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;
}

यह समाधान एकल घटक वाले पिकवर्वि के लिए ठीक काम करता है। यदि आपके पास 1 से अधिक है, तो जो मैं देख सकता हूं, उससे लेबल ओवरलैप हो जाएंगे।
PKCLsoft

23
  1. स्टोरीबोर्ड पर जाएं
  2. PickerView चुनें
  3. आइडेंटिटी इंस्पेक्टर पर जाएं (तीसरा टैब)
  4. उपयोगकर्ता परिभाषित रनटाइम विशेषता जोड़ें
  5. कीपथ = पाठकाण्ड
  6. प्रकार = रंग
  7. मूल्य = [आप की पसंद का रंग]

स्क्रीनशॉट


कृपया अपना उत्तर बताएं
Gwenc37

11
यह एक आधे में काम करता है, क्यूस पाठ काला है लेकिन जब आप इसे पिकर पर स्क्रॉल करते हैं तो वह सफेद में बदल जाता है
शियाल

4
केवल तभी काम करता है जब आप स्क्रॉल करते हैं
क्रिस वान बसकिर्क

Hi @ chris-van-buskirk मेरे ऐड-ऑन की जाँच करें [_thePrettyPicker selectRow: prettyIndex inComponent: 0 animated: YES];
१०:३६ में

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

मैं दो घटकों का उपयोग कर एक पिकर व्यू के साथ एक ही समस्या में भाग गया । मेरा समाधान कुछ संशोधनों के साथ ऊपर के समान है। क्योंकि मैं दो घटकों का उपयोग कर रहा हूं इसलिए दो अलग-अलग सरणियों से खींचना आवश्यक है।

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

स्विफ्ट 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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.