iphone कस्टम ढाल पृष्ठभूमि के साथ UITableViewCell, हाइलाइट रंग के रूप में एक और ढाल के साथ




बालों को हाईलाइट कैसे करें (3)

मेरे पास कस्टम लेआउट वाला कस्टम UITableViewCell है मैं एक ढाल पृष्ठभूमि चाहता था, इसलिए मेरे UITableViewDelegate cellForRowAtIndexPath में: विधि, मैं एक CAGradientLayer बनाता है और इसे insertSubLayer के साथ सेल की परत में जोड़ें: atIndex: (सूचकांक 0 का उपयोग करके)। यह दो चीज़ों को छोड़कर ठीक काम करता है:

सबसे महत्वपूर्ण बात, मैं यह नहीं समझ सकता कि पंक्ति को हाइलाइट करने पर भिन्न ग्रेडिएंट रंग को कैसे बदलना है। मैंने कुछ बातें करने की कोशिश की है, लेकिन मैं इसे काम करने के लिए ढांचे के साथ पर्याप्त परिचित नहीं हूं। उस कोड को तालिका प्रतिनिधि या सेल के अंदर रखने के लिए आदर्श स्थान कहां होगा?

इसके अलावा, तालिका में प्रत्येक कक्ष के बीच एक 1px सफेद स्थान है। मेरे मुख्य दृश्य, टेबल पर एक पृष्ठभूमि का रंग, और सेल पर एक पृष्ठभूमि का रंग पृष्ठभूमि रंग है। क्या किसी प्रकार का पैडिंग या स्पेसर UITableView में डिफ़ॉल्ट रूप से है?


Answer #1

मुझे पहले प्रश्न के बारे में निश्चित नहीं है, लेकिन मुझे लगता है कि आप चयनित बैकग्राउंडदृश्य संपत्ति को इसी तरह निर्धारित कर सकते हैं कि आप पृष्ठभूमि की दृष्टि से कैसे स्थापित करते हैं। कोशिकाओं के बीच का सफेद स्थान शायद विभाजक है। आप उस रंग की तरह बदल सकते हैं

tableView.separatorColor = [UIColor redColor];

Answer #2

मुझे पता है कि यह थ्रेड पुराना है, लेकिन आपके प्रश्न के पहले भाग के लिए यह एक समाधान है (सेल के चयनित और गैर-चयनित राज्यों में एक ढाल जोड़ने):

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{    
    [cell setBackgroundColor:[UIColor clearColor]];

    CAGradientLayer *grad = [CAGradientLayer layer];
    grad.frame = cell.bounds;
    grad.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor], (id)[[UIColor blackColor] CGColor], nil];

    [cell setBackgroundView:[[UIView alloc] init]];
    [cell.backgroundView.layer insertSublayer:grad atIndex:0];

    CAGradientLayer *selectedGrad = [CAGradientLayer layer];
    selectedGrad.frame = cell.bounds;
    selectedGrad.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];

    [cell setSelectedBackgroundView:[[UIView alloc] init]];
    [cell.selectedBackgroundView.layer insertSublayer:selectedGrad atIndex:0];
}

Answer #3

मैं इसके साथ दिनों के लिए संघर्ष किया। यह समाधान काफी आसान रहा, लेकिन पहेली के विभिन्न भागों में कई अलग-अलग उत्तरों और साइटें फैली गईं। पहेली का लापता टुकड़ा सामग्री दृश्य और पृष्ठभूमि दृश्य और जहां चयन रंग लागू किया जाता है के बीच भेद होने के लिए निकला।

मेरे समाधान की विशेषताएं:

  • मैं अपने सेल को एक निब से लोड करता हूं ताकि मैं आईबी में सामग्री का लेआउट कर सकूं। प्रोग्राम को प्रोग्राम से बाहर रखना मुफ़्त है
  • मैं एक वैश्विक शैली ऑब्जेक्ट से ढाल रंगों को पकड़ता हूं क्योंकि मुझे ग्राहक द्वारा ढाल को अनुकूलित करना है।
    • मैंने सेल के चयन रंग को नीब में भूरे रंग में सेट किया है, इसलिए डिफ़ॉल्ट (नीला) मेरी रंग योजना से टकराकर नहीं करता है।
  • मैं पृष्ठभूमि दृश्य में ग्रेडिएंट जोड़ता हूं यदि आप ऐसा नहीं करते हैं, तो चयन रंग सही तरीके से प्रदर्शित नहीं होता है। UITableViewCell का डिफ़ॉल्ट रूप से पृष्ठभूमि दृश्य नहीं है, इसलिए आपको इसे पहले बनाना होगा।

यह आखिरी मुद्दा गुप्त संघटक था जिसने मेरे लिए यह सब काम किया।

मैंने अपने UITableCellView उपवर्ग को एक फ़ैक्टरी विधि जोड़ दिया क्योंकि मैं एक से अधिक सारणी में एक ही सेल का उपयोग करना चाहता था।

+(ActivityDetailCellView *) createWithStyle: (WMStyle *) style {  
  UIViewController *temporaryController = [[UIViewController alloc] 
       initWithNibName: @"ActivityDetailCellView"
       bundle: nil];

  ActivityDetailCellView *cell = (ActivityDetailCellView *) temporaryController.view;

  CAGradientLayer *lightGradient = [CAGradientLayer layer];
  lightGradient.frame = cell.bounds;
  lightGradient.colors = style.lightGradient;

  UIView *background = [[UIView alloc] initWithFrame: cell.bounds];
  [background.layer insertSublayer:lightGradient atIndex:0];  
  cell.backgroundView = background;

  return cell;
}






uitableview