ইউআইটিএবলভিউসেল সাদা পটভূমি দেখায় এবং iOS7 এ পরিবর্তন করা যায় না


186

আমি একটি কাস্টম টেবিল ভিউ সেল ক্লাস প্রয়োগ করেছি যা উত্তরাধিকার সূত্রে প্রাপ্ত UITableViewCell। টেবিলভিউতে একটি পটভূমি চিত্র রয়েছে, তাই আমি চাই সেলটির পটভূমি স্বচ্ছ হোক। এটি iOS7 এর আগে দুর্দান্ত দেখাচ্ছে looks

যাইহোক, আইওএস 7-তে, সেলটি সর্বদা একটি সাদা পটভূমিতে দেখানো হয়।


এমনকি Xcode7, 2015 এর জন্যও স্টোরিবোর্ডে একটি বাগ রয়েছে : আপনাকে কোডের সাথে একটি ঘরের পটভূমি রঙ সেট করতে হবে।


আপনি সরাসরি তার বৈশিষ্ট্যের পটভূমির রঙ অ্যাক্সেস করে পটভূমির রঙটি পরিবর্তন করতে পারেন। সেল.ব্যাকগ্রাউন্ড কালার = [ইউআইকিওলোর ক্লিয়ার কালার];
বিরুম্যাক্স

উত্তর:


384

যেমন অ্যাপল ডিওসি বলেছে ( ইউআইটিএবল ভিউসেল ক্লাস রেফারেন্স ):

... আইওএস 7-এ, ডিফল্টরূপে কক্ষগুলির একটি সাদা ব্যাকগ্রাউন্ড থাকে ; আইওএসের পূর্ববর্তী সংস্করণগুলিতে, ঘরগুলি ঘেরের টেবিল দর্শনটির পটভূমি রঙের উত্তরাধিকার সূত্রে প্রাপ্ত। আপনি যদি কোনও ঘরের পটভূমির রঙ পরিবর্তন করতে চান তবে টেবিল-ভিউ : উইল ডিসপ্লেকেল: ফরআউটআইডেক্সপথ: আপনার টেবিল দর্শনের প্রতিনিধিটির পদ্ধতিতে এটি করুন।

সুতরাং আমার ক্ষেত্রে যে স্বচ্ছ পটভূমি সহ কক্ষগুলি দেখানোর জন্য, কেবল নীচের মত টেবিল ভিউ নিয়ন্ত্রকের মধ্যে প্রতিনিধি পদ্ধতিটি প্রয়োগ করা দরকার:

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

জাস্ট নোট : @ নুল যেমন বলেছিলেন, "... ইন্টারফেস নির্মাতায় একটি বাগ আছে বলে মনে হচ্ছে ..." , আমি এটিতে বাগ আছে কিনা তা পুরোপুরি নিশ্চিত নই, তবে তার মন্তব্যে বেশ কয়েকটি ভোট পেয়েছে বলে মনে হচ্ছে। সুতরাং আপনি আইবি ব্যবহার করলে কিছু ভুল হতে পারে। :)


53
দুর্ভাগ্যক্রমে সত্য নয়, ইন্টারফেস বিল্ডারে একটি বাগ রয়েছে বলে মনে হচ্ছে এবং আমি স্টোরিবোর্ড থেকে এটি আমার কাস্টম ঘরে সেট করতে পারিনি।
তারেক হাল্লাক

1
@ নুল, আহা, আইওএস 7 এসডিকে এখনও অনেকগুলি বাগ ঠিক করার দরকার আছে বলে মনে হচ্ছে। আমি ইতিমধ্যে কিছু পূরণ করেছি, তবে স্টোরিবোর্ড সম্পর্কিত, আমার কোনও ধারণা নেই। :)
Kjuly

4
আপনি tableView:cellForRowAtIndexPath:পদ্ধতিতে এটি করতে পারেন ।
বাগগাফ

1
নিবন্ধন করুন আমি এখনও এটি লক্ষ্য করেছি না, এখনও আমার জন্য কাজ করে বলে মনে হচ্ছে। :)
Kjuly

1
বাগ্লোফ যেমন উপরে বলেছে - এটি টেবিলের মধ্যে করুন দেখুন: সেলফোরআরএটিআইডেক্সপথ:
আমেরিকান

66

আমি এটি কিছুটা তদন্ত করেছি এবং জানতে পারি যে সেল ব্যাকগ্রাউন্ড কালারটি উপস্থিতি সিস্টেম দ্বারা সেট করা আছে। সুতরাং আপনার আবেদনের সমস্ত কক্ষের যদি পরিষ্কার পটভূমি থাকে তবে সবচেয়ে সহজ সমাধানটি হ'ল:

[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];

এমনকি যদি তাদের পৃথক পটভূমি থাকে, তবে পরিষ্কার রঙটি ডিফল্ট হিসাবে সবচেয়ে সুবিধাজনক বলে মনে হয়।


1
আপনি আমার বন্ধু একটি দৈত্য। আমি আমার সমস্তUITableViewCell গুলি সাবক্লাস করি , তাই বিজি রঙ সেট করতে ইনিশিয়ালাইজার সহ একটি সুপারক্লাস সরবরাহ করা আমার পক্ষে সমস্যা ছিল না clearColor, তবে কী অনুমান করবেন? এটি কাজ করে নি ... মানে, কেন, অ্যাপল?
মাজিওড

এইটা কাজ করে. যাইহোক, সাদা রঙ দর্শন ছাড়াই পপস। সেরা প্রভাবের জন্য শীর্ষ প্রতিক্রিয়া নিয়ে এসেছেন (পপিং নয়)।
কার্ল প্রেহন

@ অ্যান্টন ফিলিমোনভ আমি এখন আমার অ্যাপলেলেজেটে একটি নির্দিষ্ট ভিউতে টেবিল ভিউ সেল উপস্থিতি সেট করেছি কন্ট্রোলার আমি কোষের জন্য আলাদা রঙ পেতে চাই আমি কীভাবে এই পরিস্থিতিটিতে যেতে পারি? আমি সেলউইলডিসপ্লে প্রতিনিধি পদ্ধতিতে ভিন্ন রঙ সেট করার চেষ্টা করেছি কিন্তু কোনও প্রভাব ফেলেনি। আপনি দয়া করে আমাকে এই বিষয়ে সহায়তা করতে পারেন
পিয়ার মোহাম্মদ থাবিব

@ পিয়ারমোহমাদহাব দয়া করে পরিবেশ সম্পর্কে আরও কিছু বলুন (আইপ্যাড / আইফোন, আইওএস সংস্করণ) এবং কিছু কোড সরবরাহ করুন। এবং প্রকৃতপক্ষে আপনি নিজে পরিস্থিতিটি খতিয়ে দেখতে পারেন - কেবল ইউআইটিএবলভিউসেলকে একটি উপক্লাস তৈরি করুন, সেটব্যাকগ্রাউন্ড কালারকে নতুনভাবে সংজ্ঞায়িত করুন: পদ্ধতি (কেবলমাত্র সুপারক্লাসকে অভ্যন্তরীণ রূপে কল করুন) এবং এই পদ্ধতির একটি ব্রেকপয়েন্ট স্থাপন করুন এবং আপনি দেখতে পাবেন, আপনি সেট করার পরে কোষের রঙের পরিবর্তন ঘটে টেবিলের ভিতরে দেখুন: উইল ডিসপ্লেকেলএলএন্টেক্সপথ:
আন্তন

1
এমনকি আপনার যদি মিশ্র কোষ থাকে, কিছু ব্যাকগ্রাউন্ড সহ কিছু থাকে (স্বচ্ছ) ছাড়াই। সবচেয়ে সহজ উপায় হ'ল একটি কাস্টম শ্রেণীর সংজ্ঞা দেওয়া এবং একই কোডটি লেখা write এইভাবে সমস্ত ইউআইটিএবলভিউসেল ক্লাসের সমস্ত ডিফল্ট থাকবে এবং কাস্টম ক্লাসগুলির পরিষ্কার রঙ থাকবে। [[কাস্টম টেবিলসেল উপস্থিতি] সেটব্যাকগ্রাউন্ড কালার: [ইউআইকলার ক্লিয়ার কালার]]; এটি অবিচ্ছিন্ন ইউআইটিএবলভিউলেসগুলিকে প্রভাবিত করবে না এবং কেবলমাত্র কাস্টম সেলগুলিতে প্রভাব ফেলবে।
আনসারি

30

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

cell.backgroundColor = [UIColor clearColor];

1
এটি আমার আইফোন 5. উপর iOS 8 এ একটা সমস্যা সাহায্য করেছে
Almo

13

UITableViewCellআইওএস 7-এ কোনওর ডিফল্ট ব্যাকগ্রাউন্ডের রঙ সাদা।

backgroundColorসম্পত্তিটি আপনার কোডের কোথাও সেট করতে হবে । উদাহরণস্বরূপ, আপনি নতুন ঘর তৈরির পরে এটি সেট করুন।

cell.backgroundColor = [UIColor clearColor];

আমি চেষ্টা করেছি কিন্তু এটি আমার পক্ষে কাজ করে নি। আপনি কি নিশ্চিত যে এটি কাজ করে?
ম্যাট্রোসভ আলেকজান্ডার

আমারে initWithCoder: aDecoder পদ্ধতিতে একটি কাস্টম টেবিল ভিউ সেলের জন্য কাজ করে।
ftvs

13

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

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

সুইফটে

tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()

শুধু এফওয়াইআই আপনি এটি আইবিতেও সেট করতে পারেন। কেবলমাত্র 'ভিউ' বিভাগের মধ্যে আপনি ব্যাকগ্রাউন্ডের রঙ পরিবর্তন করেছেন তা নিশ্চিত করুন, এবং কেবল 'টেবিল ভিউ' বিভাগ নয় যা সম্ভবত দৃশ্যমানভাবে প্রভাবিত করে না।
অ্যান্ডি ডুন

1
এটি আমার জন্যও কাজ করেছিল, আমি এটির দ্রুততম সংস্করণটি খুঁজছিলাম।
কোডটিতে

10

এটি অবশ্যই একটি আইওএস বাগ। আইওএস 8-এ, Interface Builderআইফোনটির জন্য ব্যাকগ্রাউন্ড রঙ নির্ধারণ করা সূক্ষ্মভাবে কাজ করে, তবে আইপ্যাডে এটি সর্বদা whiteColor। এটি ঠিক করার জন্য, cellForIndexPathডেটা উত্স বার্তায়, এটি এ রেখে দিন:

cell.backgroundColor = cell.backgroundColor

এবং এটি কাজ করবে। ঠিক এই কারণেই আমি বলেছিলাম যে এটি একটি বাগ কারণ কোড নিজেই বেশ পরিমাণে বুলশ * টি, তবে এটি কার্যকর হয়।


তবুও Xcode7 / iOS9 এর ক্ষেত্রে। আমি টেবিলভিউতে সুস্পষ্ট কোডটি যুক্ত করেছি: উইল ডিসপ্লেকেল: উপরের পরামর্শ অনুসারে রওএটআইএনডেক্সপথ।
অ্যান্ড্রু ডানকান

এক্সকোড 7.0.1 সংকলন সর্বজনীন অ্যাপ আইফোন চলমান আইফোন নেভিগেশন কালো পটভূমি দেখিয়েছে 7,8,9 তবে আইপ্যাডে সাদা পটভূমি আইওএস 9.0.2 চলছে (এবং সম্ভবত অন্যরা কিন্তু যাচাই করতে পারে না)। উপরের কোডটি এটি স্থির করেছে।
স্কটিবি

স্ট্যাটিক টেবিল ভিউ ওভাররাইডের জন্য সেল.ব্যাকগ্রাউন্ড কালার = ইউআইসিওলর.ক্লায়ারকলার () সহ ডিসপ্লেকেল সেল করুন। আইবিতে রঙিন পুনর্নির্ধারণ আমার পক্ষে কাজ করে নি।
ভিক্টর কুচেরা

4

এটি হতে পারে যে আপনার ইউআইটিএবলভিউসেলটি ডিফল্টরূপে নির্বাচিত হয়েছে .. আপনি এটি এক্সকোড 6 এস নতুন ভিজ্যুয়াল ডিবাগার (বা ঠিক এই দর্শনটি এই সাদা কোষটির কারণ হিসাবে দেখা দিচ্ছে) তা নিশ্চিত করেই নিশ্চিত করতে পারেন ।

এখানে চিত্র বর্ণনা লিখুন

মজার বিষয় হল, এটি জানার পরে .. নির্বাচিত ঘরের ব্যাকগ্রাউন্ড রঙ নির্ধারণের জন্য এখনও কাজ হয়নি .. আরও কিছু গবেষণা করে দেখা যাচ্ছে যে আমি এই কাস্টম সেলটি তৈরি করার সময় আমাকে কেবল নির্বাচনের স্টাইলটি পরিবর্তন করতে হয়েছিল:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // do customization here
    }
    self.selectionStyle = UITableViewCellSelectionStyleNone;
    [self setBackgroundColor:[UIColor clearColor]];
    return self;
}

ভিজ্যুয়াল ডিবাগারের জন্য ভাঙা লিঙ্ক
সুরগাচ

3

আমি দেখতে পেয়েছি যে উপরেরগুলির কোনওটি এক্সকোড 5.1.1, আইওএস 7.1 থেকে কাজ করেনি।

আপনি যদি প্রোটোটাইপ সেলগুলি সহ ইন্টারফেস বিল্ডার ব্যবহার করে থাকেন তবে প্রোটোটাইপ সেলটি নির্বাচন করুন, তারপরে দেখুন বিভাগের বৈশিষ্ট্য নির্বাচক থেকে, ব্যাকগ্রাউন্ড ফর্ম ডিফল্টটি সাফ রঙে পরিবর্তন করুন:

এখানে চিত্র বর্ণনা লিখুন

এটি ঠিকঠাক কাজ করে বলে মনে হচ্ছে। উপরের কোড পরিবর্তনের কোনওটিরই দরকার নেই, হয় - এটি খাঁটি আইবি সমাধান।


2

গৃহীত উত্তরটি আমার পক্ষে সমস্যার সমাধান করেনি। আমি এই কাজ করতে ছিল:

  1. ইন্টারফেস বিল্ডারে, টেবিলের দৃশ্যটি নির্বাচন করুন। তারপরে বৈশিষ্ট্য পরিদর্শক থেকে, ভিউ বিভাগ থেকে, ব্যাকগ্রাউন্ডটি স্বচ্ছ (0% অস্বচ্ছতা) এ সেট করুন ।

এখানে চিত্র বর্ণনা লিখুন

  1. টেবিলের ডেটা উত্স শ্রেণীর সেল ফোরোআউটআইডেক্সপথ পদ্ধতি থেকে:

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
        reuseIdentifier:CellIdentifier];
    cell.backgroundColor = [UIColor clearColor]; //Make cell transparent

ঠিক আছে, আপনি ইন্টারফেস বিল্ডার ব্যবহার করেন .. @ উত্তরটি আমার উত্তরের নীচে যেমন মন্তব্য করেছে, "... ইন্টারফেস বিল্ডারে একটি বাগ আছে বলে মনে হচ্ছে ..." , আমি এটির ত্রুটি আছে কিনা তা পুরোপুরি নিশ্চিত নই, তবে মনে হচ্ছে এটি কারণ মন্তব্য বেশ কিছু ভোট পেয়েছে। ;)
Kjuly

স্বচ্ছ ঘরের পটভূমিতে আইওএস 7-এ থাকা কিছু নিশ্চয়ই বগি। আমি আশা করি আমার উত্তর আমার মতো একই পরিস্থিতির মুখোমুখি অন্যদের সহায়তা করবে।
রাজভি

আপনার টেবিলভিউয়ের জন্য কক্ষগুলি তৈরি করার এটি সঠিক উপায় নয়, বিশেষত যদি আপনি ইন্টারফেস বিল্ডার / স্টোরিবোর্ড ব্যবহার করছেন। কোড স্নিপেটে আপনি প্রতিবার আপনার প্রতিনিধিকে জিজ্ঞাসা করার সময় একটি নতুন সেল তৈরি করছেন, এটি পুনরায় ব্যবহৃত হবে না! সেল-পুনঃব্যবহারের কর্মক্ষমতা সুবিধা পেতে আপনার ব্যবহার করা উচিত cell = [tableView dequeueReusableCellWithIdentifier:<#Reuse ID#> forIndexPath:indexPath]। পূর্ববর্তী সংস্করণগুলিতে আপনি সূচিপথ আর্গুমেন্টটি ফেলে দিন এবং তারপরে শূন্যতার জন্য পরীক্ষা করুন, initWithStyle:reuseIdentifierনীল ক্ষেত্রে আপনার কোড স্নিপেট অনুসারে ইনস্ট্যান্ট করে ।
ইকুরামিডিয়া

ইকুরেমিডিয়া: আমি পুনরায় ব্যবহারের কোডটি আমার পোস্টের বাইরে রেখে দিয়েছি। অবশ্যই, আমি কোষগুলি পুনরায় ব্যবহার করি। এটি এই পোস্টের পয়েন্ট নয়।
রাজভি

2

আমার জন্য কাজটি সাইন cell.backgroundColor = cell.contentView.backgroundColor; ইন করুন tableView:willDisplayCell:forRowAtIndexPath:বা tableView:cell:forRowAtIndexPath:কাজটি করেছেন।

কারণ আমি ইন্টিফেস বিল্ডারে কনটেন্টভিউয়ের পটভূমির রঙটি পছন্দসই হিসাবে সেট করেছি।


1

কোনও কক্ষে ইউআই অবজেক্ট যুক্ত করার সময়, এক্সকোড 5 / আইওএস 7 একটি নতুন "কন্টেন্ট ভিউ" যুক্ত করে যা ঘরের সমস্ত উপাদানগুলির তত্ত্বাবধান হবে। কক্ষটির পটভূমি রঙ সেট করতে, এই সামগ্রী দর্শনের পটভূমি রঙ সেট করুন। উপরের সমাধানগুলি আমার পক্ষে কার্যকর হয়নি তবে এটি আমার জন্য ভাল কাজ করেছে।


পূর্ববর্তী এসডিকে সংস্করণগুলিতে সামগ্রী ভিউ পাওয়া যায়, আপনি সবেমাত্র কন্টেন্ট ভিউয়ের জন্য একটি পটভূমি রঙ সেট করেছেন যা ঘরের পটভূমি ভিউটি কভার করে।
Kjuly

ঠিক আছে, এটি এক্সকোডের আগের ইন্টারফেস বিল্ডারে স্বয়ংক্রিয়ভাবে পপআপ হয় না your আপনার পয়েন্টটি ঠিক কী?
DrBug

মানে, আপনার উত্তরটি অন্য সমস্যার জন্য আলোচিত হয়েছে, আমার প্রশ্ন জিজ্ঞাসা করা হয়নি। আপনি ঠিক আপনার ঘরের জন্য একটি পটভূমি রঙ সেট করতে চান, তাই না? সুতরাং আইওএস in এ ডিফল্টরূপে বা না থাকায় কোনও কক্ষের সাদা ব্যাকগ্রাউন্ড নেই, আপনি সর্বদা বিষয়বস্তু দৃষ্টির জন্য রঙ সেট করে এটি প্রয়োগ করতে পারেন, সামগ্রীটির ঘরের ব্যাকগ্রাউন্ড ভিউয়ের উপরে রাখার কারণ। ধারণা তৈরী কর? ;)
Kjuly

1

সুইফট 1.2 সমাধান:

আপনার ঘরের ব্যাকগ্রাউন্ড রঙের মতো কেবল একটি স্পষ্ট সংজ্ঞা যুক্ত করুন:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // Configure the cell...
    cell.backgroundColor = UIColor.clearColor()

    return cell
}

দুঃখিত। এটা আমার খারাপ। এটা কাজ করে। আমি অন্য কিছু সেটিংস মিস করেছি।
সুঙ কিম

1

একই সমস্যা ছিল, ছিল

  1. নির্বাচন স্টাইল হিসাবে নীল সেট করুন এবং
  2. কোডটি সংশোধন করার জন্য এটি যুক্ত করুন

    override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    
      var bgColorView: UIView = UIView()
      bgColorView.backgroundColor = UIColor(red: (76.0 / 255.0), green: (161.0 / 255.0), blue: (255.0 / 255.0), alpha: 1.0)
      bgColorView.layer.masksToBounds = true
      tableView.cellForRowAtIndexPath(indexPath)!.selectedBackgroundView = bgColorView
      return true
    }

0

আপনার ইউআইটিএবলভিউ সেলকে লোভনীয় করার জন্য আপনি রঙ কোডও ব্যবহার করতে পারেন।

[cell setBackgroundColor:[self colorWithHexString:@"1fbbff"]];

রঙ কোড পদ্ধতি প্রয়োগের জন্য এটি কোড:

-(UIColor*)colorWithHexString:(NSString*)hex
{
    NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];


    if ([cString length] < 6) return [UIColor grayColor];

    if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];

    if ([cString length] != 6) return  [UIColor grayColor];

    NSRange range;
    range.location = 0;
    range.length = 2;
    NSString *rString = [cString substringWithRange:range];

    range.location = 2;
    NSString *gString = [cString substringWithRange:range];

    range.location = 4;
    NSString *bString = [cString substringWithRange:range];

    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f)
                         green:((float) g / 255.0f)
                          blue:((float) b / 255.0f)
                         alpha:1.0f];
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.