কোনও ইউআইটিএবলভিউসেলের পটভূমির রঙ কীভাবে কাস্টমাইজ করবেন?


188

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

আইফোন এসডিকে দিয়ে এটি করার কোনও উপায় আছে কি?

উত্তর:


193

আপনার ঘরের কনটেন্ট ভিউটি আপনার রঙের জন্য ব্যাকগ্রাউন্ড কালার সেট করতে হবে। যদি আপনি আনুষাঙ্গিকগুলি (যেমন প্রকাশের তীরগুলি ইত্যাদি) ব্যবহার করেন তবে সেগুলি সাদা হিসাবে দেখাবে, সুতরাং আপনার সেগুলির কাস্টম সংস্করণগুলি রোল করার প্রয়োজন হতে পারে।


108
উদাঃ মাইসেল.কম্টন ভিউ.ব্যাকগ্রাউন্ড কালার = [ইউআইসি কালার গ্রিন কালার];
জোবু 1324

1
ভ্লাদো এগ্রিগোরভের উত্তর আরও নমনীয় - উইলিয়াম
ডেনিসের

3
UITableViewCellAccessoryCheckmarkউদাহরণস্বরূপ, কীভাবে নিজস্ব রোল করবেন তার কোনও লিঙ্ক ? ধন্যবাদ।
ড্যান রোজনস্টার্ক

6
এটি দেখতে কখনও কখনও আপনাকে সেট করতে হবে:cell.textLabel.backgroundColor = [UIColor clearColor];
ইভান মুরান

205

এই সমস্যাটি সমাধান করার জন্য আমি এখানে এসেছি সবচেয়ে দক্ষ উপায়, উইলডিসপ্লে সেল প্রতিনিধি পদ্ধতিটি ব্যবহার করুন (এটি সেল.স্টেক্সটেলবেল.টেক্সট এবং / অথবা সেল.ডেটেলটেক্সটেলবেল.স্টেক্স ব্যবহার করার সময় পাঠ্য লেবেলের পটভূমির জন্য সাদা রঙের যত্ন নেয় takes ):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { ... }

এই প্রতিনিধি পদ্ধতিটি যখন কক্ষের রঙ বলা হয় আপনি যখন ব্যবহার করবেন তখন যেমন টেবিল ভিউয়ের চেয়ে ঘরের মাধ্যমে রঙটি নিয়ন্ত্রণ করা হয়:

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

সুতরাং সেল প্রতিনিধি পদ্ধতির শৃঙ্খলার অভ্যন্তরে ঘরের বিকল্প রঙগুলিতে নিম্নলিখিত কোড যুক্ত করুন বা কেবল সারণীর সমস্ত কক্ষকে একই রঙ করতে ফাংশন কলটি ব্যবহার করুন।

if (indexPath.row % 2)
{
    [cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
}
else [cell setBackgroundColor:[UIColor clearColor]];

এই সমাধানটি আমার পরিস্থিতিতে ভাল কাজ করেছে ...


এটি একটি উপায় ক্লিনার সমাধান। অন্যান্য সমাধানগুলির বেশিরভাগটিরই হয় ইউআইটিএবলভিউসেলকে সাবক্লাসিং করা প্রয়োজন। ভ্লাদো এগ্রিগোরভের সমাধান আমার পক্ষে কাজ করে না।
রনি লিউ

সত্যই, এবং এটি হ'ল অ্যাপল নিজেই বিভিন্ন ডাব্লুডাব্লুডিসি উপস্থাপনা দেখেছি according
মাইক ওয়েলার

ভাল - আপনি তালিকার শীর্ষে যখন নতুন সারি যুক্ত করতে হবে তখন ছাড়ুন। এই পদ্ধতিটি সমস্ত সংযোজনকে একই রঙ করে। রিফ্রেশ এটি ঠিক করে দেয় তবে অযথা সময় নেয়। গতকাল পাওয়া গেছে ...
জেএম

কোর ডেটা ব্যবহার করার সময় বাদে এটি ভালভাবে কাজ করছে বলে মনে হচ্ছে। NSFetchedResultsController এর মাধ্যমে যুক্ত নতুন কক্ষগুলি উইলডিসপ্লেচেলকে সঠিকভাবে কল করবে বলে মনে হয় না। আমি এটা কাজ উপার্জন লোকসানে আছি ...
radven

সুইফট ২.০ তে ব্যাকগ্রাউন্ড রঙ নির্ধারণের জন্য সমতুল্য লাইন:cell.backgroundColor = UIColor.clearColor
কেবিপন্টিয়াস

104

এটি সত্যই সহজ, যেহেতু ওএস 3.0 কেবল উইলডিসপ্লেকেল পদ্ধতিতে ঘরের পটভূমির রঙ সেট করে। আপনার অবশ্যই সেল ফরফরআউটইন্ডেক্সপ্যাথে রঙ সেট করতে হবে না।

এটি সরল এবং গোষ্ঠীযুক্ত উভয় শৈলীর জন্য কাজ করে:

কোড:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor redColor];
}

PS: এখানে উইলডিসপ্লেসেল এর জন্য ডকুমেন্টেশন এক্সট্র্যাক্ট:

"একটি সারণী দর্শনটি তার ডেলিগেটকে এই বার্তাটি প্রেরণ করে সেলটি একটি সারি আঁকার জন্য ব্যবহার করার ঠিক আগে, প্রতিনিধিটিকে সেল বস্তুটি প্রদর্শিত হওয়ার আগে কাস্টমাইজ করার অনুমতি দেয় This এই পদ্ধতিটি প্রতিনিধি দ্বারা রাষ্ট্র-ভিত্তিক বৈশিষ্ট্যগুলিকে পূর্বের দ্বারা সেট করা ওভাররাইড করার সুযোগ দেয় সারণী দর্শন যেমন নির্বাচন এবং পটভূমির রঙ। প্রতিনিধি ফিরে আসার পরে টেবিল ভিউটি কেবলমাত্র আলফা এবং ফ্রেম বৈশিষ্ট্যগুলি সেট করে এবং তারপরে সারিগুলি অ্যানিমেটেড করার সময় কেবল সেগুলি স্লাইড বা আউট স্লাইড হয়। "

কলোনেল থেকে এই পোস্টে এই তথ্যটি পেয়েছি । তাকে ধন্যবাদ!


3
এই সঠিক উত্তর হিসাবে হিসাবে আপনি কিছু আছে এমনকি আত চিহ্নিত করা উচিত আপনি একটি disclosureIndiator আছে
আশিস Awaghad

1
আপনি যদি আমার জন্য সারণী দর্শন পটভূমিতে একটি আলাদা সেল ব্যাকগ্রাউন্ড রঙ চান তবে এটি কাজ করে না।
ক্রিস

গোষ্ঠী কক্ষের জন্য, আপনি সেলফোর্ডে সেট করতে পারেন
শরেন আইয়ার্স

58

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

এখানে একটি নমুনা দেওয়া হয়েছে যেখানে ঘরের পটভূমি হলুদ পেন্ট করা হয়েছে:

UIView* backgroundView = [ [ [ UIView alloc ] initWithFrame:CGRectZero ] autorelease ];
backgroundView.backgroundColor = [ UIColor yellowColor ];
cell.backgroundView = backgroundView;
for ( UIView* view in cell.contentView.subviews ) 
{
    view.backgroundColor = [ UIColor clearColor ];
}

1
আপনি যদি এটি করেন তবে অস্বচ্ছ সম্পত্তিটিও NO তে সেট করতে ভুলবেন না।
লিলি বালার্ড

11
স্বচ্ছ সেল নিয়ন্ত্রণ ব্যবহার করার জন্য সত্যই সুপারিশ করা হয় না। স্ক্রোলিং কর্মক্ষমতা অনেকটা প্রভাবিত হবে এজন্য অ্যাপল সর্বদা অস্বচ্ছ নিয়ন্ত্রণ ব্যবহার করতে বলে।
মাইক ওয়েলার

3
আইওএস ৪.২ এ এবং পরে দেখে মনে হচ্ছে লুপটির আর প্রয়োজন নেই।
ফ্র্যাঙ্ক স্মিট

খুব সুন্দর. আনুষঙ্গিক দর্শন ব্যবহার করার সময় নিখুঁত কাজ করে !!
RyanG

19

এটি কেবল আপনার মধ্যে ইউআইটিএবলভিউ প্রতিনিধি শ্রেণীর ফাইল (। মি) রাখুন:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell  forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UIColor *color = ((indexPath.row % 2) == 0) ? [UIColor colorWithRed:255.0/255 green:255.0/255 blue:145.0/255 alpha:1] : [UIColor clearColor];
    cell.backgroundColor = color;
}

7

আমি সেবার সাথে সম্মতি জানালাম, আমি আমার বিকল্প সারি রঙটি রোফোর্ডইন্ডেক্সপথ প্রতিনিধি পদ্ধতিতে সেট করার চেষ্টা করেছি তবে ৩.২ এবং ৪.২-এর মধ্যে অসামঞ্জস্যপূর্ণ ফলাফল পাচ্ছি। নিম্নলিখিত আমার জন্য দুর্দান্ত কাজ করেছে।

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if ((indexPath.row % 2) == 1) {
        cell.backgroundColor = UIColorFromRGB(0xEDEDED);
        cell.textLabel.backgroundColor = UIColorFromRGB(0xEDEDED);
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
    }
    else
    {
        cell.backgroundColor = [UIColor whiteColor];
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
    }

}

1
এটি উইলডিসপ্লেলে সেট করা কেন কোনও পার্থক্য করে তা এখনও বুঝতে পারছি না। এটিকে যাইহোক বলা হয় আমরা বাস্তবায়ন করি কি না?
শরেন ইয়ার্স

6

সমস্ত বিভিন্ন সমাধান চেষ্টা করার পরে, নিম্নলিখিত পদ্ধতিটি সর্বাধিক মার্জিত একটি। নিম্নলিখিত প্রতিনিধি পদ্ধতিতে রঙ পরিবর্তন করুন:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (...){
        cell.backgroundColor = [UIColor blueColor];
    } else {
        cell.backgroundColor = [UIColor whiteColor];
    }
}

4

ভ্লাদো এগ্রিগোরভের কিছু ভাল পরামর্শ রয়েছে - সর্বোত্তম উপায় হ'ল ব্যাকগ্রাউন্ডভিউ তৈরি করা এবং সেই রঙ দেওয়া, ক্লিয়ার কালারের সাথে সমস্ত কিছু সেট করে। এছাড়াও, আমি মনে করি যে উপায়টি সঠিকভাবে রঙ পরিষ্কার করার একমাত্র উপায় (তার নমুনা চেষ্টা করুন - তবে 'হলুদ রঙের পরিবর্তে' ক্লিয়ারার কালার 'সেট করুন), যা আমি যা করার চেষ্টা করছিলাম।


এই পদ্ধতির একটি সুবিধা হ'ল আপনি ইন্টারফেস বিল্ডারে রঙিন ডিজাইনের সময় সম্পত্তি রাখতে পারেন। আর একটি কম নকশার সমস্যা যার জন্য বিকাশকারীদের ইন্টারঅ্যাকশন প্রয়োজন।
হোয়াইটনিল্যান্ড

1
সেল.ব্যাকগ্রাউন্ডভিউ = [[[ইউআইভিউ বরাদ্দ] initWithFrame: সেল.বাউন্ডস] স্বতঃপরে] সেল.ব্যাকগ্রাউন্ডভিউ.ব্যাকগ্রাউন্ড কালার = [ইউআইকিওলোর রেড কালার];
ব্রায়ান

3

টেবিল ভিউ সেলটির পটভূমি কাস্টমাইজ করা অবশেষে এবং "সমস্ত বা কিছুই নয়" পদ্ধতির হয়ে ওঠে। কোনও বিষয়বস্তু ঘরের পটভূমির জন্য যে রঙ বা চিত্র ব্যবহার করা হয়েছে তা অদ্ভুত দেখাচ্ছে না এমন পরিবর্তন করা খুব কঠিন।

কারণটি হল যে ঘরটি প্রকৃতপক্ষে দেখার প্রস্থকে প্রশস্ত করে। বৃত্তাকার কোণগুলি এর অঙ্কন শৈলীর মাত্র একটি অংশ এবং সামগ্রী ভিউ এই অঞ্চলে বসে।

আপনি যদি সামগ্রীর ঘরের রঙ পরিবর্তন করেন তবে আপনার কোণে সাদা বিট দৃশ্যমান হবে। আপনি যদি পুরো ঘরের রঙ পরিবর্তন করেন তবে আপনার দর্শন প্রস্থের প্রসারিত রঙের একটি ব্লক থাকবে।

আপনি অবশ্যই কোনও ঘর কাস্টমাইজ করতে পারেন তবে এটি প্রথমে আপনি যতটা ভাবতে পারেন তেমন সহজ নয়।


1
এটি গোষ্ঠীযুক্ত টেবিলের কক্ষগুলির জন্য অবশ্যই সত্য, তবে সমতল টেবিলগুলিতে উদ্বিগ্ন হওয়ার মতো তেমন কিছু নেই। অ্যাকসেসরিজবিহীন একটি অযৌক্তিক কক্ষটি সূক্ষ্ম দেখতে হবে।
বেন গটলিব

বেন - ভাল পয়েন্ট। আমি প্রাথমিকভাবে গোষ্ঠীযুক্ত টেবিলগুলি ব্যবহার করি তবে আপনি উল্লেখ করেছেন যে সরল সারণীগুলি এই সমস্যাগুলির মধ্যে থেকে ভোগেন না।
অ্যান্ড্রু গ্র্যান্ট

3

একটি ভিউ তৈরি করুন এবং এটিকে ঘরের ব্যাকগ্রাউন্ড ভিউ হিসাবে সেট করুন

UIView *lab = [[UIView alloc] initWithFrame:cell.frame];
            [lab setBackgroundColor:[UIColor grayColor]];
            cell.backgroundView = lab;
            [lab release];

3

N.Berendt এর উত্তরটি প্রসারিত করার জন্য - আপনি যদি প্রকৃত সেল ডেটা অবজেক্টের কোনও রাজ্যের উপর ভিত্তি করে সেল রঙ নির্ধারণ করতে চান, আপনি যখন টেবিল সেলের জন্য থাকা অন্যান্য তথ্য কনফিগার করছেন, যা সাধারণত আপনি যখন থাকেন সেলফোর্ডআউটইন্ডেক্সপথ পদ্ধতিতে, আপনি কনটেন্ট ভিউ ব্যাকগ্রাউন্ড কালার থেকে সেল ব্যাকগ্রাউন্ড কালার সেট করতে উইল ডিসপ্লেকেল পদ্ধতিটি ওভাররাইড করে এটি করতে পারেন - এটি প্রকাশের বোতামের ব্যাকগ্রাউন্ড ইত্যাদির ইস্যুটির আশেপাশে আসে ঠিক না তবে এটি আপনাকে সেলফোর্ডআউটইন্টেক্সপথ পদ্ধতিতে রঙ নিয়ন্ত্রণ করতে দেয় যেখানে আপনি আপনার অন্যান্য ঘর কাস্টমাইজেশন সমস্ত করছেন।

সুতরাং: আপনি যদি এই পদ্ধতিটি আপনার টেবিল দর্শনের প্রতিনিধিটিতে যুক্ত করেন:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = cell.contentView.backgroundColor;
}

তারপরে আপনার সেলফোরআউএন্টআইডেক্সপথ পদ্ধতিতে আপনি এটি করতে পারেন:

if (myCellDataObject.hasSomeStateThatMeansItShouldShowAsBlue) {
    cell.contentView.backgroundColor = [UIColor blueColor];
}

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


3

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

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    UIImage *cellImage = [UIImage imageNamed:@"myimage.png"];//myimage is a 20x50 px with  gradient  color created with gimp
    UIImageView *cellView = [[UIImageView alloc] initWithImage:cellImage];
    cellView.contentMode = UIContentViewModeScaleToFill;
    cell.backgroundView = cellView;
    //set the background label to clear
    cell.titleLabel.backgroundColor= [UIColor clearColor];
}

আপনি যদি ইউটিআইটিভিউকে অ্যাট্রিবিউট ইন্সপেক্টরকে কাস্টম হিসাবে সেট করে থাকেন তবে এটিও কাজ করবে।


2

আমার সমাধানটি সেলফোর্ডআউটইন্টেক্সপথ ইভেন্টে নিম্নলিখিত কোড যুক্ত করা হল:

UIView *solidColor = [cell viewWithTag:100];
if (!solidColor) {

    solidColor = [[UIView alloc] initWithFrame:cell.bounds];
    solidColor.tag = 100; //Big tag to access the view afterwards
    [cell addSubview:solidColor];
    [cell sendSubviewToBack:solidColor];
    [solidColor release];
}
solidColor.backgroundColor = [UIColor colorWithRed:254.0/255.0
                                             green:233.0/255.0
                                              blue:233.0/255.0
                                             alpha:1.0];

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


1

সাবক্লাস ইউআইটিএবলভিউ সেল এবং প্রয়োগের ক্ষেত্রে এটি যুক্ত করুন:

-(void)layoutSubviews
{
    [super layoutSubviews];
    self.backgroundColor = [UIColor blueColor];
}

1
    UIView *bg = [[UIView alloc] initWithFrame:cell.frame];
    bg.backgroundColor = [UIColor colorWithRed:175.0/255.0 green:220.0/255.0 blue:186.0/255.0 alpha:1]; 
    cell.backgroundView = bg;
    [bg release];

1

এটি সর্বশেষতম এক্সকোডে কাজ করবে।

-(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
    cell.backgroundColor = [UIColor grayColor];
}

0

এটা চেষ্টা কর:

- (void)tableView:(UITableView *)tableView1 willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
    tableView1.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"Cream.jpg"]];
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.