গোষ্ঠীযুক্ত টেবিল ভিউ ঘরের পটভূমি / সীমানা রঙগুলি কীভাবে কাস্টমাইজ করা যায়?


114

আমি দলবদ্ধ-স্টাইলের ইউআইটিএবলভিউয়ের পটভূমি এবং সীমানা রঙ উভয়ই কাস্টমাইজ করতে চাই।

নিম্নলিখিতটি ব্যবহার করে আমি ব্যাকগ্রাউন্ডের রঙটি কাস্টমাইজ করতে সক্ষম হয়েছি:

tableView.contentView.backgroundColor = [UIColor greenColor];

তবে সীমানার রঙ এখনও এমন কিছু যা আমি কীভাবে পরিবর্তন করতে জানি না।

গোষ্ঠীযুক্ত-স্টাইলের টেবিল দৃশ্যের এই দুটি দিকটি আমি কীভাবে কাস্টমাইজ করব?


আপনার ইউআইটিএবলভিউ কনট্রোলারের আইবিআউটলেট ভিউ সেট করা আছে বা স্বচ্ছতা কাজ করবে না তা নিশ্চিত করা গুরুত্বপূর্ণ!
কেসব্যাশ

1
আপনি কীভাবে আপনার কোডের কোডটি কাজ করবেন তা নিশ্চিত নন। টেবিলভিউতে কোনও সামগ্রী ভিউ সম্পত্তি আছে বলে মনে হয় না।
গ্রেগ ম্যালেটিক

5
থ্রেডটি ইউআইটিএবলভিউকলের পটভূমি সম্পর্কে এবং ইউআইটিবেল ভিউ সম্পর্কে নয় (যেমন প্রশ্নটি প্রস্তাব দেয়)। আসল উত্তরটি হবে @ dizy এর উত্তর।
nacho4d

উত্তর:


100

আপডেট: আইফোন ওএস 3.0.০ এ এবং তারপরে UITableViewCellএখন একটি backgroundColorসম্পত্তি রয়েছে যা এটি সত্যই সহজ করে তোলে (বিশেষত আরম্ভকারীটির সাথে সংমিশ্রণে [UIColor colorWithPatternImage:])। তবে আমি উত্তরটির ২.০ সংস্করণ এখানে যে কারও কারওর জন্য প্রয়োজন তা রেখে দেব ...


এটি যতটা সত্যই হওয়া উচিত তার চেয়ে শক্ত। যখন এটি করতে হয়েছিল আমি এখানে এটি কীভাবে করেছি:

আপনার ইউআইটিএবলভিউসেল এর ব্যাকগ্রাউন্ডভিউ বৈশিষ্ট্যটি একটি কাস্টম ইউআইভিউতে সেট করতে হবে যা সীমানা এবং পটভূমিকে যথাযথ রঙে আঁকবে। এই দর্শনটির জন্য 4 টি বিভিন্ন মোডে সীমানা আঁকতে সক্ষম হওয়া দরকার, একটি বিভাগের প্রথম কক্ষের জন্য নীচে গোলাকার, একটি বিভাগের শেষ কক্ষের জন্য নীচে গোলাকার, কোনও বিভাগের মাঝখানে কোনও কোণ নয় , এবং একটি কক্ষ রয়েছে এমন বিভাগগুলির জন্য সমস্ত 4 কোণে বৃত্তাকার।

দুর্ভাগ্যক্রমে আমি কীভাবে এই মোডটি স্বয়ংক্রিয়ভাবে সেট করতে পারি তা বুঝতে পারি না, সুতরাং আমাকে এটি ইউআইটিবেলভিউ ডেটাসোর্সের -सेलফোর্ডআউটইন্ডেক্সপথ পদ্ধতিতে সেট করতে হয়েছিল।

এটি সত্যিকারের পিআইটিএ তবে আমি অ্যাপল ইঞ্জিনিয়ারদের সাথে নিশ্চিত হয়েছি যে এটি বর্তমানে একমাত্র উপায়।

আপডেট custom কাস্টম বিজি ভিউয়ের কোড এখানে। গোলাকার কোণগুলি কিছুটা মজার দেখায় এমন একটি অঙ্কন বাগ রয়েছে তবে এটি ঠিক করার সুযোগ পাওয়ার আগেই আমরা একটি আলাদা নকশায় চলে এসে কাস্টম ব্যাকগ্রাউন্ডগুলি সরিয়ে ফেললাম। তবুও এটি সম্ভবত আপনার পক্ষে খুব সহায়ক হবে:

//
//  CustomCellBackgroundView.h
//
//  Created by Mike Akers on 11/21/08.
//  Copyright 2008 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef enum  {
    CustomCellBackgroundViewPositionTop, 
    CustomCellBackgroundViewPositionMiddle, 
    CustomCellBackgroundViewPositionBottom,
    CustomCellBackgroundViewPositionSingle
} CustomCellBackgroundViewPosition;

@interface CustomCellBackgroundView : UIView {
    UIColor *borderColor;
    UIColor *fillColor;
    CustomCellBackgroundViewPosition position;
}

    @property(nonatomic, retain) UIColor *borderColor, *fillColor;
    @property(nonatomic) CustomCellBackgroundViewPosition position;
@end

//
//  CustomCellBackgroundView.m
//
//  Created by Mike Akers on 11/21/08.
//  Copyright 2008 __MyCompanyName__. All rights reserved.
//

#import "CustomCellBackgroundView.h"

static void addRoundedRectToPath(CGContextRef context, CGRect rect,
                                 float ovalWidth,float ovalHeight);

@implementation CustomCellBackgroundView
@synthesize borderColor, fillColor, position;

- (BOOL) isOpaque {
    return NO;
}

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(c, [fillColor CGColor]);
    CGContextSetStrokeColorWithColor(c, [borderColor CGColor]);

    if (position == CustomCellBackgroundViewPositionTop) {
        CGContextFillRect(c, CGRectMake(0.0f, rect.size.height - 10.0f, rect.size.width, 10.0f));
        CGContextBeginPath(c);
        CGContextMoveToPoint(c, 0.0f, rect.size.height - 10.0f);
        CGContextAddLineToPoint(c, 0.0f, rect.size.height);
        CGContextAddLineToPoint(c, rect.size.width, rect.size.height);
        CGContextAddLineToPoint(c, rect.size.width, rect.size.height - 10.0f);
        CGContextStrokePath(c);
        CGContextClipToRect(c, CGRectMake(0.0f, 0.0f, rect.size.width, rect.size.height - 10.0f));
    } else if (position == CustomCellBackgroundViewPositionBottom) {
        CGContextFillRect(c, CGRectMake(0.0f, 0.0f, rect.size.width, 10.0f));
        CGContextBeginPath(c);
        CGContextMoveToPoint(c, 0.0f, 10.0f);
        CGContextAddLineToPoint(c, 0.0f, 0.0f);
        CGContextStrokePath(c);
        CGContextBeginPath(c);
        CGContextMoveToPoint(c, rect.size.width, 0.0f);
        CGContextAddLineToPoint(c, rect.size.width, 10.0f);
        CGContextStrokePath(c);
        CGContextClipToRect(c, CGRectMake(0.0f, 10.0f, rect.size.width, rect.size.height));
    } else if (position == CustomCellBackgroundViewPositionMiddle) {
        CGContextFillRect(c, rect);
        CGContextBeginPath(c);
        CGContextMoveToPoint(c, 0.0f, 0.0f);
        CGContextAddLineToPoint(c, 0.0f, rect.size.height);
        CGContextAddLineToPoint(c, rect.size.width, rect.size.height);
        CGContextAddLineToPoint(c, rect.size.width, 0.0f);
        CGContextStrokePath(c);
        return; // no need to bother drawing rounded corners, so we return
    }

    // At this point the clip rect is set to only draw the appropriate
    // corners, so we fill and stroke a rounded rect taking the entire rect

    CGContextBeginPath(c);
    addRoundedRectToPath(c, rect, 10.0f, 10.0f);
    CGContextFillPath(c);  

    CGContextSetLineWidth(c, 1);  
    CGContextBeginPath(c);
    addRoundedRectToPath(c, rect, 10.0f, 10.0f);  
    CGContextStrokePath(c); 
}


- (void)dealloc {
    [borderColor release];
    [fillColor release];
    [super dealloc];
}


@end

static void addRoundedRectToPath(CGContextRef context, CGRect rect,
                                float ovalWidth,float ovalHeight)

{
    float fw, fh;

    if (ovalWidth == 0 || ovalHeight == 0) {// 1
        CGContextAddRect(context, rect);
        return;
    }

    CGContextSaveGState(context);// 2

    CGContextTranslateCTM (context, CGRectGetMinX(rect),// 3
                           CGRectGetMinY(rect));
    CGContextScaleCTM (context, ovalWidth, ovalHeight);// 4
    fw = CGRectGetWidth (rect) / ovalWidth;// 5
    fh = CGRectGetHeight (rect) / ovalHeight;// 6

    CGContextMoveToPoint(context, fw, fh/2); // 7
    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);// 8
    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);// 9
    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);// 10
    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); // 11
    CGContextClosePath(context);// 12

    CGContextRestoreGState(context);// 13
}

আপনি আপনার কোড ব্যবহার করে আমাকে সাহায্য করতে পারেন? => Stackoverflow.com/questions/7309580/...
Nielsou Hacken-বার্গেন

2
কেন কেবল পৃথক কলর ব্যবহার করবেন না? আমার জন্য, এটি ঘর এবং সীমানার মধ্যে পৃথককারী উভয় রেখাকেই রঙ করে।
ফার্নান্দো রেডনডো

সেই ড্রয়ারেক্ট সিজি তোরণ পাথের পরিবর্তে, আমি সমস্ত কোণে গোল করে একটি ক্লিপযুক্ত ভিউ ব্যবহার করেছি। আমি অ-প্রথম সারির জন্য এটি নেতিবাচক ওয়াই দিয়েছি এবং আমি এটি সর্বশেষ-সারিগুলির জন্য ওভার-উচ্চতা-এড করব।
হাফথর

34

আমি জানি উত্তরগুলি গোষ্ঠীভুক্ত টেবিল কোষগুলি পরিবর্তনের সাথে সম্পর্কিত, তবে যদি কেউ টেবিলভিউর পটভূমির রঙ পরিবর্তন করতে চায় তবে:

আপনাকে কেবল সেট করতে হবে না:

tableview.backgroundColor = color;

আপনার পটভূমির দর্শনটি পরিবর্তন করতে বা পরিত্রাণ পেতে হবে:

tableview.backgroundView = nil;  

1
হেই ধন্যবাদ. আপনি এই প্রশ্নের সঠিক উত্তরটি বিশেষভাবে দিয়েছেন।
জিনকোড

24

এই কোডের জন্য প্রথমে ধন্যবাদ। অঙ্কনের কোণার সমস্যাটি দূর করতে আমি এই ফাংশনে কিছু অঙ্কন পরিবর্তন করেছি।

-(void)drawRect:(CGRect)rect 
{
    // Drawing code

    CGContextRef c = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(c, [fillColor CGColor]);
    CGContextSetStrokeColorWithColor(c, [borderColor CGColor]);
    CGContextSetLineWidth(c, 2);

    if (position == CustomCellBackgroundViewPositionTop) {

        CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny + 1;

        maxx = maxx - 1;
        maxy = maxy ;

        CGContextMoveToPoint(c, minx, maxy);
        CGContextAddArcToPoint(c, minx, miny, midx, miny, ROUND_SIZE);
        CGContextAddArcToPoint(c, maxx, miny, maxx, maxy, ROUND_SIZE);
        CGContextAddLineToPoint(c, maxx, maxy);

        // Close the path
        CGContextClosePath(c);
        // Fill & stroke the path
        CGContextDrawPath(c, kCGPathFillStroke);        
        return;
    } else if (position == CustomCellBackgroundViewPositionBottom) {

        CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny ;

        maxx = maxx - 1;
        maxy = maxy - 1;

        CGContextMoveToPoint(c, minx, miny);
        CGContextAddArcToPoint(c, minx, maxy, midx, maxy, ROUND_SIZE);
        CGContextAddArcToPoint(c, maxx, maxy, maxx, miny, ROUND_SIZE);
        CGContextAddLineToPoint(c, maxx, miny);
        // Close the path
        CGContextClosePath(c);
        // Fill & stroke the path
        CGContextDrawPath(c, kCGPathFillStroke);    
        return;
    } else if (position == CustomCellBackgroundViewPositionMiddle) {
        CGFloat minx = CGRectGetMinX(rect) , maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny ;

        maxx = maxx - 1;
        maxy = maxy ;

        CGContextMoveToPoint(c, minx, miny);
        CGContextAddLineToPoint(c, maxx, miny);
        CGContextAddLineToPoint(c, maxx, maxy);
        CGContextAddLineToPoint(c, minx, maxy);

        CGContextClosePath(c);
        // Fill & stroke the path
        CGContextDrawPath(c, kCGPathFillStroke);    
        return;
    }
}

আপনার কোড সহ লাইন প্রস্থ প্রায় 2 পক্স। আমি যখন সিজি কনটেক্সটসেটলাইনউইথকে 1 এ সেট করার চেষ্টা করি তখন এটি আরও ঘন হয়। কেন?
ফার্নান্দো রেডনডো

আমি কি একই প্রশ্ন পেয়েছি? কেন এটি সিস্টেমের চেয়ে ঘন।
বাগসফ্লায়ার

16

কোডটির জন্য আপনাকে ধন্যবাদ, আমি যা খুঁজছিলাম ঠিক সেটাই এটি। আমি কাস্টমসেলব্যাকগ্রাউন্ডভিউ পজিশনসিংগেল সেলের ক্ষেত্রে প্রয়োগ করতে, ভিমালের কোডটিতে নিম্নলিখিত কোডটিও যুক্ত করেছি। (চারটি কোণই বৃত্তাকার)


else if (position == CustomCellBackgroundViewPositionSingle)
{
        CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , midy = CGRectGetMidY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny + 1;

        maxx = maxx - 1;
        maxy = maxy - 1;

        CGContextMoveToPoint(c, minx, midy);
        CGContextAddArcToPoint(c, minx, miny, midx, miny, ROUND_SIZE);
        CGContextAddArcToPoint(c, maxx, miny, maxx, midy, ROUND_SIZE);
        CGContextAddArcToPoint(c, maxx, maxy, midx, maxy, ROUND_SIZE);
        CGContextAddArcToPoint(c, minx, maxy, minx, midy, ROUND_SIZE);

        // Close the path
        CGContextClosePath(c);
        // Fill & stroke the path
        CGContextDrawPath(c, kCGPathFillStroke);                
        return;     
}

13

মাইকের একার্সের উপরের কাস্টমসেলব্যাকগ্রাউন্ডভিউ কোডটি নিয়ে আমি একটি জিনিস যাচ্ছিলাম যা অন্যদের জন্য কার্যকর হতে পারে:

cell.backgroundViewকক্ষগুলি পুনরায় ব্যবহার করা হলে স্বয়ংক্রিয়ভাবে পুনরায় আঁকা যায় না এবং ব্যাকগ্রাউন্ডভিউয়ের অবস্থানের বর্ণে পরিবর্তনগুলি পুনরায় ব্যবহৃত কোষগুলিকে প্রভাবিত করে না। তার মানে দীর্ঘ টেবিলগুলি ভুলভাবে আঁকবেcell.backgroundViews তাদের অবস্থানের ।

একটি নতুন ব্যাকগ্রাউন্ড তৈরি না করেই এটি সমাধান করতে প্রতিবার একটি সারি প্রদর্শিত হবে দেখুন, আপনার [cell.backgroundView setNeedsDisplay]শেষে কল করুন -[UITableViewController tableView:cellForRowAtIndexPath:]। বা আরও পুনরায় ব্যবহারযোগ্য সমাধানের জন্য কাস্টমসেলব্যাকগ্রাউন্ডভিউয়ের অবস্থান সেটাকে একটি অন্তর্ভুক্ত করতে ওভাররাইড করুন [self setNeedsDisplay]


ওভাররাইডিং-সেট পজিশন সম্পর্কে ভাল ধারণা
মাইক Akers

12

এই সুপার সহায়ক পোস্টের জন্য ধন্যবাদ। সেখানকার যে কেউ যদি (আমার মতো!) আইবিতে চিত্র / পাঠ্য / অন্যান্য বিষয়বস্তুর মাধ্যমে এটি কাস্টমাইজ করার পরিবর্তে একটি সম্পূর্ণ শূন্য সেল ব্যাকগ্রাউন্ড পেতে চান এবং কীভাবে নোংরা সীমানা / প্যাডিং / থেকে মুক্তি পেতে পারেন তা নির্ধারণ করতে পারবেন না পটভূমি যদিও আপনি এটি আইবিতে সাফ করার জন্য সেট করেছেন ... আমি যে কোডটি ব্যবহার করেছি সেটি এখানে কৌশলটি করেছে!


- (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {

    static NSString *cellId = @"cellId";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellId];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"EditTableViewCell" owner:self options:nil];
        cell = cellIBOutlet;
        self.cellIBOutlet = nil;
    }

    cell.backgroundView = [[[UIView alloc] initWithFrame: CGRectZero] autorelease];
    [cell.backgroundView setNeedsDisplay];

    ... any other cell customizations ...

    return cell;
}

আশা করি এটি অন্য কাউকে সাহায্য করবে! কবজির মতো কাজ করার মতো মনে হচ্ছে।


আপনার সমাধানে একটি মেমরি ফুটো আছে। আপনি যে দৃশ্যে সেট করছেন সেটি আপনার স্বতঃপ্রণোদিত হওয়া দরকার cell.backgroundView
ক্যামেরন স্পিকার্ট

7

যারা তাদের কোড পোস্ট করেছেন তাদের সবাইকে অনেক ধন্যবাদ। এটি খুব দরকারী।

গোষ্ঠীযুক্ত টেবিল ভিউ সেলগুলির জন্য হাইলাইটের রঙ পরিবর্তন করার জন্য আমি একই ধরণের সমাধান পেয়েছি। মূলত ইউআইটিএবলভিউসেল এর নির্বাচিতব্যাকগ্রাউন্ডভিউ (ব্যাকগ্রাউন্ডভিউ নয়)। এমনকি আইফোন ওএস Which.০ এ এখনও এই পিটা সমাধান দরকার, যতদূর আমি বলতে পারি ...

নীচের কোডটিতে একটি শক্ত রঙের পরিবর্তে গ্রেডিয়েন্টের সাথে হাইলাইটটি রেন্ডার করার পরিবর্তন রয়েছে। এছাড়াও সীমান্ত রেন্ডারিং সরানো হয়। উপভোগ করুন।

//
//  CSCustomCellBackgroundView.h
//

#import <UIKit/UIKit.h>

typedef enum  
{
    CustomCellBackgroundViewPositionTop, 
    CustomCellBackgroundViewPositionMiddle, 
    CustomCellBackgroundViewPositionBottom,
    CustomCellBackgroundViewPositionSingle,
    CustomCellBackgroundViewPositionPlain
} CustomCellBackgroundViewPosition;

@interface CSCustomCellBackgroundView : UIView 
{
    CustomCellBackgroundViewPosition position;
 CGGradientRef gradient;
}

@property(nonatomic) CustomCellBackgroundViewPosition position;

@end



//
//  CSCustomCellBackgroundView.m
//

#import "CSCustomCellBackgroundView.h"



#define ROUND_SIZE 10


static void addRoundedRectToPath(CGContextRef context, CGRect rect,
         float ovalWidth,float ovalHeight);


@implementation CSCustomCellBackgroundView


@synthesize position;

- (BOOL) isOpaque 
{
    return NO;
}

- (id)initWithFrame:(CGRect)frame 
{
    if (self = [super initWithFrame:frame]) 
 {
        // Initialization code
  const float* topCol = CGColorGetComponents([[UIColor redColor] CGColor]);
  const float* bottomCol = CGColorGetComponents([[UIColor blueColor] CGColor]);

  CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
  /*
  CGFloat colors[] =
  {
   5.0 / 255.0, 140.0 / 255.0, 245.0 / 255.0, 1.00,
   1.0 / 255.0,  93.0 / 255.0, 230.0 / 255.0, 1.00,
  };*/
  CGFloat colors[]=
  {
   topCol[0], topCol[1], topCol[2], topCol[3],
   bottomCol[0], bottomCol[1], bottomCol[2], bottomCol[3]
  };
  gradient = CGGradientCreateWithColorComponents(rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0])*4));
  CGColorSpaceRelease(rgb);
    }
    return self;
}


-(void)drawRect:(CGRect)rect 
{
    // Drawing code

    CGContextRef c = UIGraphicsGetCurrentContext();

    if (position == CustomCellBackgroundViewPositionTop) 
 {

        CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny + 1;

        maxx = maxx - 1;
        maxy = maxy ;

        CGContextMoveToPoint(c, minx, maxy);
        CGContextAddArcToPoint(c, minx, miny, midx, miny, ROUND_SIZE);
        CGContextAddArcToPoint(c, maxx, miny, maxx, maxy, ROUND_SIZE);
        CGContextAddLineToPoint(c, maxx, maxy);

        // Close the path
        CGContextClosePath(c);

  CGContextSaveGState(c);
  CGContextClip(c);
  CGContextDrawLinearGradient(c, gradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
  CGContextRestoreGState(c);

        return;
    } 
 else if (position == CustomCellBackgroundViewPositionBottom) 
 {

        CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny + 1;

        maxx = maxx - 1;
        maxy = maxy - 1;

        CGContextMoveToPoint(c, minx, miny);
        CGContextAddArcToPoint(c, minx, maxy, midx, maxy, ROUND_SIZE);
        CGContextAddArcToPoint(c, maxx, maxy, maxx, miny, ROUND_SIZE);
        CGContextAddLineToPoint(c, maxx, miny);
        // Close the path
        CGContextClosePath(c);

  CGContextSaveGState(c);
  CGContextClip(c);
  CGContextDrawLinearGradient(c, gradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
  CGContextRestoreGState(c);

        return;
    } 
 else if (position == CustomCellBackgroundViewPositionMiddle) 
 {
        CGFloat minx = CGRectGetMinX(rect) , maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny + 1;

        maxx = maxx - 1;
        maxy = maxy ;

        CGContextMoveToPoint(c, minx, miny);
        CGContextAddLineToPoint(c, maxx, miny);
        CGContextAddLineToPoint(c, maxx, maxy);
        CGContextAddLineToPoint(c, minx, maxy);
  // Close the path
        CGContextClosePath(c);

  CGContextSaveGState(c);
  CGContextClip(c);
  CGContextDrawLinearGradient(c, gradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
  CGContextRestoreGState(c);

        return;
    }
 else if (position == CustomCellBackgroundViewPositionSingle)
 {
        CGFloat minx = CGRectGetMinX(rect) , midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect) ;
        CGFloat miny = CGRectGetMinY(rect) , midy = CGRectGetMidY(rect) , maxy = CGRectGetMaxY(rect) ;
        minx = minx + 1;
        miny = miny + 1;

        maxx = maxx - 1;
        maxy = maxy - 1;

        CGContextMoveToPoint(c, minx, midy);
        CGContextAddArcToPoint(c, minx, miny, midx, miny, ROUND_SIZE);
        CGContextAddArcToPoint(c, maxx, miny, maxx, midy, ROUND_SIZE);
        CGContextAddArcToPoint(c, maxx, maxy, midx, maxy, ROUND_SIZE);
        CGContextAddArcToPoint(c, minx, maxy, minx, midy, ROUND_SIZE);
        // Close the path
        CGContextClosePath(c);              

  CGContextSaveGState(c);
  CGContextClip(c);
  CGContextDrawLinearGradient(c, gradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
  CGContextRestoreGState(c);

        return;         
 } 
 else if (position == CustomCellBackgroundViewPositionPlain) {
    CGFloat minx = CGRectGetMinX(rect);
    CGFloat miny = CGRectGetMinY(rect), maxy = CGRectGetMaxY(rect) ;
    CGContextDrawLinearGradient(c, gradient, CGPointMake(minx,miny), CGPointMake(minx,maxy), kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
    return;
}

}

- (void)dealloc 
{
    CGGradientRelease(gradient);
    [super dealloc];
}


- (void) setPosition:(CustomCellBackgroundViewPosition)inPosition
{
 if(position != inPosition)
 {
  position = inPosition;
  [self setNeedsDisplay];
 }
}

@end


static void addRoundedRectToPath(CGContextRef context, CGRect rect,
         float ovalWidth,float ovalHeight)

{
    float fw, fh;

    if (ovalWidth == 0 || ovalHeight == 0) {// 1
        CGContextAddRect(context, rect);
        return;
    }

    CGContextSaveGState(context);// 2

    CGContextTranslateCTM (context, CGRectGetMinX(rect),// 3
         CGRectGetMinY(rect));
    CGContextScaleCTM (context, ovalWidth, ovalHeight);// 4
    fw = CGRectGetWidth (rect) / ovalWidth;// 5
    fh = CGRectGetHeight (rect) / ovalHeight;// 6

    CGContextMoveToPoint(context, fw, fh/2); // 7
    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);// 8
    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);// 9
    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);// 10
    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); // 11
    CGContextClosePath(context);// 12

    CGContextRestoreGState(context);// 13
}

এটি সত্যিই দুর্দান্ত এবং আমি যা খুঁজছিলাম। যদিও আমার দুটি বিকল্প দরকার। গ্রেডিয়েন্ট বা শক্ত রঙ হিসাবে বিজি সেট করুন। আমি উভয় গ্রেডিয়েন্ট বর্ণকে একই শক্ত রঙটিতে সেট করে শক্ত রঙ সেট করেছি। এটি যদিও অনিবার্য গণনা চাপায়। এটির মতো কিছু বিকল্প পেয়ে ভাল লাগবে।
করিম

4

আপনি সেট করে সীমানার রঙটি কাস্টমাইজ করতে পারেন

tableView.separatorColor

2

সারণী দর্শন সীমানার রঙ পরিবর্তন করতে:

In.h:

#import <QuartzCore/QuartzCore.h>

ইন। মি:

tableView.layer.masksToBounds=YES;
tableView.layer.borderWidth = 1.0f;
tableView.layer.borderColor = [UIColor whiteColor].CGColor;

0

প্রায় 5 টি লাইন কোড যুক্ত করে এই কাজটি প্রিটিকিট ব্যবহার করে সহজেই করা যায় । আপনি যদি nibফাইলগুলি ব্যবহার করেন বা storyboard, এটিও এই ছোট্ট হ্যাকটি প্রয়োগ করতে ভুলবেন না । আপনি যখন এই পদ্ধতির ব্যবহার করেন তখন আপনার কক্ষটি এ থেকে সাবক্লাস করা উচিত PrettyTableViewCell:

#import <PrettyKit/PrettyKit.h>

@class RRSearchHistoryItem;

@interface RRSearchHistoryCell : PrettyTableViewCell

এটি আমার উদাহরণ cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString *cellIdentifier = @"RRSearchHistoryCell";

  RRSearchHistoryCell *cell = (RRSearchHistoryCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];

  if ( cell == nil ) {

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"RRSearchHistoryCell" owner:self options:nil];
    cell = topLevelObjects[0];
    cell.gradientStartColor = RGB(0xffffff);
    cell.gradientEndColor = RGB(0xf3f3f3);

  }

  RRSearchHistoryItem *item = _historyTableData[indexPath.row];
  [cell setHistoryItem:item];


  [cell prepareForTableView:tableView indexPath:indexPath];

  return cell;
}

-5

আমি এটির সাথে সমস্যায় পড়েছি এবং প্রচুর সংমিশ্রণের সংমিশ্রণ চেষ্টা করেছি কারণ আমি লক্ষ্য করেছি যে কয়েকটি কোষের জন্য এটি অন্যদের জন্য নয় ঠিক কাজ করেছে।

আশ্চর্যের সাথে আমি জানতে পেরেছিলাম যে সেল.ব্যাকগ্রাউন্ড কালারকে লাইটগ্রায়ার কালারে সেট করা সম্ভব এবং সমস্ত কাজ পুরোপুরি কাজ করে - তবে ব্লু কালার আমাকে বাইরের প্রান্তগুলি আপডেট না করার সমস্যার কারণ করেছে।

যদি না সবুজ ব্যবহার করা সত্যিই গুরুত্বপূর্ণ না হয় - সম্ভবত আপনি এটি চেষ্টা করতে চাইতে পারেন। এটি এমন একটি বৈশিষ্ট্য যা কোনও ঘর নির্বাচিত হওয়ার ইঙ্গিত দিলে লোককে কেবল ধূসর বর্ণ ব্যবহার করতে পারা যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.