সেল নির্বাচন করা হয় তখন ইউআইটিএবলভিউসেল সাবভিউ অদৃশ্য হয়ে যায়


178

আমি একটি রঙ-চয়নকারী টেবিল ভিউ বাস্তবায়ন করছি যেখানে ব্যবহারকারীর মধ্যে 10 টি রঙ (পণ্যের উপর নির্ভর করে) চয়ন করতে পারেন। ব্যবহারকারী অন্যান্য বিকল্পগুলিও (যেমন হার্ড ড্রাইভের ক্ষমতা, ...) নির্বাচন করতে পারেন।

সমস্ত রঙের বিকল্পগুলি তাদের নিজস্ব টেবিলভিউ বিভাগের মধ্যে রয়েছে।

আমি আসল বর্ণটি দেখিয়ে টেক্সটলবেলের বাম দিকে কিছুটা বর্গক্ষেত্র প্রদর্শন করতে চাই।

এখনই আমি একটি সাধারণ বর্গক্ষেত্র ইউআইভিউউ যুক্ত করছি, এটির মতো সঠিক পটভূমির রঙ দিন:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:RMProductAttributesCellID];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:RMProductAttributesCellID] autorelease];
        cell.indentationWidth = 44 - 8;

        UIView *colorThumb = [[[UIView alloc] initWithFrame:CGRectMake(8, 8, 28, 28)] autorelease];
        colorThumb.tag = RMProductAttributesCellColorThumbTag;
        colorThumb.hidden = YES;
        [cell.contentView addSubview:colorThumb];
    }

    RMProductAttribute *attr = (RMProductAttribute *)[_product.attributes objectAtIndex:indexPath.section];
    RMProductAttributeValue *value = (RMProductAttributeValue *)[attr.values objectAtIndex:indexPath.row];
    cell.textLabel.text = value.name;
    cell.textLabel.backgroundColor = [UIColor clearColor];

    UIView *colorThumb = [cell viewWithTag:RMProductAttributesCellColorThumbTag];
    colorThumb.hidden = !attr.isColor;
    cell.indentationLevel = (attr.isColor ? 1 : 0);

    if (attr.isColor) {
        colorThumb.layer.cornerRadius = 6.0;
        colorThumb.backgroundColor = value.color;
    }

    [self updateCell:cell atIndexPath:indexPath];

    return cell;
}

এটি সমস্যা ছাড়াই সূক্ষ্ম প্রদর্শন করে।

আমার একমাত্র সমস্যাটি হ'ল আমি যখন "বর্ণ" সারিটি ফেইড-টু-নীল নির্বাচন অ্যানিমেশনের সময় নির্বাচন করি তখন আমার কাস্টম ইউআইভিউ (কালারথম্ব) লুকানো থাকে। এটি নির্বাচন / অবিচ্ছিন্ন অ্যানিমেশনটি শেষ হওয়ার পরে আবার দৃশ্যমান হয়, তবে এটি একটি কুৎসিত শিল্পকলা তৈরি করে।

এটি সংশোধন করার জন্য আমার কী করা উচিত? আমি কি ঠিক জায়গায় সাবভিউ inোকাচ্ছি না?

(DoSelectRowAtIndexPath- এ বিশেষ কিছু নেই, আমি কেবলমাত্র ঘরের অ্যাকসেসরিজকে একটি চেকবক্স বা কিছুতে পরিবর্তন করেছি এবং বর্তমান সূচকপথটি নির্বাচন না করা)।


আপডটেল সব কি সম্পর্কে?
ইদান

আপডেটকেল চেকমার্ক সেট করা বা না করা, প্রাপ্যতার উপর নির্ভর করে পাঠ্য রঙ চয়ন করা, ... তবে নিজের ঘরে বা রঙথম্বের সাথে সম্পর্কিত কোনও আসল পরিবর্তন নয় some
সাইরিল

গৃহীত উত্তর সমাধান সরবরাহ করে না, সমাধানের জন্য নীচে আমার উত্তরটি দেখুন
পাভেল গুরভ

উত্তর:


227

UITableViewCellসমস্ত উপ দেখার পটভূমির রঙ পরিবর্তন যখন ঘর নির্বাচিত বা হাইলাইট হয়, আপনি অগ্রাহ্য Tableview কোষের এই সমস্যার সমাধান করতে পারে setSelected:animatedএবং setHighlighted:animatedএবং দেখুন পটভূমির রঙ রিসেট।

উদ্দেশ্য সি:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
   UIColor *color = self.yourView.backgroundColor;        
   [super setSelected:selected animated:animated];

    if (selected){
        self.yourView.backgroundColor = color;
    }
}

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
    UIColor *color = self.yourView.backgroundColor;        
    [super setHighlighted:highlighted animated:animated];

    if (highlighted){
        self.yourView.backgroundColor = color;
    }
}

সুইফটে ৩.১:

override func setSelected(_ selected: Bool, animated: Bool) {
    let color = yourView.backgroundColor         
    super.setSelected(selected, animated: animated)

    if selected {
        yourView.backgroundColor = color
    }
}

override func setHighlighted(_ highlighted: Bool, animated: Bool) {
    let color = yourView.backgroundColor
    super.setHighlighted(highlighted, animated: animated)

    if highlighted {
        yourView.backgroundColor = color
    }
}

আমরা প্রয়োজন না if (highlighted)এবং if (selected)অবস্থার? আমি মনে করি আমাদের যদি এই শর্ত না থাকে তবে এটি কার্যকর হবে।
habষভ তায়াল

@ Habষভটাইয়াল মূলত একই মান দিয়ে ভেরিয়েবলটিকে অগ্রাহ্য করা এড়াতে হবে
ক্যামেলোপার

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

এই পদ্ধতির অ্যানিমেশন বাতিল করে, তাই এর কোনও বুদ্ধি নেই। .None তে ঘর নির্বাচন শৈলী সেট করা আরও ভাল।
আলেকজান্ডার ড্যানিলভ

122

এটি হ'ল টেবিল ভিউ সেল হাইলাইটেড স্টেটের জন্য সামগ্রী ভিউয়ের অভ্যন্তরে সমস্ত দর্শনগুলির পটভূমির রঙ স্বয়ংক্রিয়ভাবে পরিবর্তন করে। UIViewআপনার রঙ আঁকতে বা UIImageViewকাস্টম 1x1 পিক্স প্রসারিত চিত্র ব্যবহার করে আপনি সাবক্লাসিং বিবেচনা করতে পারেন ।


1
আমাকে বোবা। অবশ্যই এটি ছিল, সাবভিউগুলি স্বচ্ছ হতে হবে যাতে নির্বাচনের অ্যানিমেশনটি সঠিকভাবে ঘটতে পারে। ধন্যবাদ!
সাইরিল

52
অথবা আপনি পটভূমি রঙকে ওভাররাইড করে আবার সেট করতে পারেন setHighlighted:animated:এবংsetSelected:animated:
pt2ph8

1
কোনওভাবে পটভূমির রঙটি পুনরায় সেট করা আমার পক্ষে কার্যকর হয়নি (আইওএস 8.1 এ চলছে)। পরিবর্তে আমার ভিউ সাবক্ল্যাসিং করে ও সেটব্যাকগ্রাউন্ড কালারকে [সুপার সেটব্যাকগ্রাউন্ড কালার: [ইউআইকিওলোর হোয়াইট कलোর] হিসাবে ওভাররাইড করে সমাধান করুন।
বিজ্জা 84

44

টেবিলভিউকেল নির্বাচন / হাইলাইটিং পদ্ধতিগুলির সাথে জগাখিচির পরিবর্তে একটি দুর্দান্ত মার্জিত সমাধান পেয়েছে। আপনি ইউআইভিউর একটি সাবক্লাস তৈরি করতে পারেন যা রঙটিকে সাফ করার জন্য এর পটভূমির রঙ সেট করা উপেক্ষা করে।

সুইফট 3/4:

class NeverClearView: UIView {
    override var backgroundColor: UIColor? {
        didSet {
            if backgroundColor != nil && backgroundColor!.cgColor.alpha == 0 {
                backgroundColor = oldValue
            }
        }
    }
}

সুইফট 2:

class NeverClearView: UIView {
    override var backgroundColor: UIColor? {
        didSet {
            if CGColorGetAlpha(backgroundColor!.CGColor) != 0 {
                backgroundColor = oldValue
            }
        }
    }
}

ওবজে-সি সংস্করণ:

@interface NeverClearView : UIView

@end

@implementation NeverClearView

- (void)setBackgroundColor:(UIColor *)backgroundColor {
    if (CGColorGetAlpha(backgroundColor.CGColor) != 0) {
        [super setBackgroundColor:backgroundColor];
    }
}

@end

এটি খুবই সুন্দর. সহজেই সেরা সমাধান যদি আপনার কাছে "ব্যাজ" বা "ট্যাগ" এর মতো কিছু পুনরায় ব্যবহারযোগ্য দৃষ্টিভঙ্গি থাকে তবে তার কখনও কখনও পরিষ্কার ব্যাকগ্রাউন্ড না থাকা উচিত। :: কৌতুক :: কি কি বিভ্রান্তিকর সমাধান @ ইউআইকিট, আপনি যখন কোনও ঘর নির্বাচন করবেন তখন সমস্ত শিশুর দৃষ্টিভঙ্গিগুলি স্বচ্ছ হিসাবে সেট করুন। সন্তানের দৃশ্যের সম্পূর্ণ উচ্চতা বা প্রস্থ বা এন গভীরতার দিকগুলিতে কমপক্ষে সীমাবদ্ধ।
সিম্পলজি

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

3
আমি সিজি কালারগেটআল্ফাকে (ব্যাকগ্রাউন্ড কালার!। সিজি কালার) == 0 এ পরিবর্তন করার পরে আমার জন্য কাজ করেছে
ক্লিটারের

9

সমস্যাটি পরিচালনা করার আরেকটি উপায় হ'ল মূল গ্রাফিক্স গ্রেডিয়েন্ট সহ ভিউ পূরণ করা, যেমন:

CAGradientLayer* gr = [CAGradientLayer layer];
gr.frame = mySubview.frame;
gr.colors = [NSArray arrayWithObjects:
                     (id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:.5] CGColor]
                     ,(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:.5] CGColor]
                     , nil];

gr.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0],[NSNumber numberWithFloat:1],nil];

[mySubview.layer insertSublayer:gr atIndex:0];

হুম, আমি এই সঠিক কোডটি চেষ্টা করছি এবং এটি আমার পক্ষে মোটেই কোনও প্রভাব ফেলছে না। আমার সাবভিউটি হ'ল একটি ইউআইএলবেল যা সেল কন্টেন্টভিউর একটি সংক্ষিপ্তসার হিসাবে যুক্ত হয়েছে এবং আইওএস under.০.১-এর অধীনে পরীক্ষার বিষয়টি বিবেচনায় রয়েছে।
জো স্ট্রাউট

আপনি উপরের কোডটি কী প্রয়োগ করবেন? এবং আপনি কি কেবল সেল ভিউতে লেবেল যুক্ত করার চেষ্টা করেছেন?
আগত

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

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

9

জন্য সুইফট 2.2 এই কাজ

cell.selectionStyle = UITableViewCellSelectionStyle.None

এবং কারণ @ অ্যান্ড্রি ব্যাখ্যা করেছেন

এটি হ'ল টেবিল ভিউ সেল হাইলাইটেড স্টেটের জন্য সামগ্রী ভিউয়ের অভ্যন্তরে সমস্ত দর্শনগুলির পটভূমির রঙ স্বয়ংক্রিয়ভাবে পরিবর্তন করে।


8

দ্বারা অনুপ্রাণিত Yatheesha বি এল এর উত্তর আমি UITableViewCell বিভাগ / এক্সটেনশন যা আপনি এবং এই স্বচ্ছতা "বৈশিষ্ট্য" বন্ধ চালু করতে পারবেন সৃষ্টি করেছেন।

দ্রুতগতি

let cell = <Initialize Cell>
cell.keepSubviewBackground = true  // Turn  transparency "feature" off
cell.keepSubviewBackground = false // Leave transparency "feature" on

উদ্দেশ্য গ

UITableViewCell* cell = <Initialize Cell>
cell.keepSubviewBackground = YES;  // Turn  transparency "feature" off
cell.keepSubviewBackground = NO;   // Leave transparency "feature" on

কিপব্যাকগ্রাউন্ডসেলটি কোকোপড সামঞ্জস্যপূর্ণ। আপনি এটি গিটহাবে খুঁজে পাবেন


7

আপনি cell.selectionStyle = UITableViewCellSelectionStyleNone;, তারপরে পটভূমি রঙ সেট করতে পারেন- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath


4

ইয়াথেষ বিএল এর উত্তর দ্বারা অনুপ্রাণিত ।

যদি আপনি সুপার.সেটসলেক্টড (নির্বাচিত, অ্যানিমেটেড: অ্যানিমেটেড) কল করেন তবে এটি আপনার সেট করা সমস্ত পটভূমির রঙ সাফ করবে । সুতরাং, আমরা সুপার পদ্ধতি কল করব না

সুইফটে:

override func setSelected(selected: Bool, animated: Bool) {    
    if(selected)  {
        contentView.backgroundColor = UIColor.red 
    } else {
        contentView.backgroundColor = UIColor.white
    }
}

override func setHighlighted(highlighted: Bool, animated: Bool) {
    if(highlighted) {
        contentView.backgroundColor = UIColor.red 
    } else {
        contentView.backgroundColor = UIColor.white
    }
}

1
সমাধানের জন্য ধন্যবাদ। +1 ইশিগ্লাইটাইটেড ভেরিয়েবল ও সেটহাইটলাইট পদ্ধতিটি ওভাররাইড করা আলাদা জিনিস। সঠিক উত্তরটি হল পদ্ধতিটিকে ওভাররাইড করা।
নুমান কারাস্লান

4

ক্ষেত্রে হতে পারে, কক্ষের সমস্ত আইটেমের জন্য ধূসর রঙ পাওয়া এড়াতে এটি সেপ্টেটস (আপনি যদি কাস্টম টেবিল ভিউ সেল ব্যবহার করছেন):

  1. নির্বাচন স্টাইলটি। নন to এ সেট করুন 👉 selectionStyle = .none

  2. এই পদ্ধতিটি ওভাররাইড করুন।

    ফানক সেট হাইলাইটলাইট (_ হাইলাইটেড: বুল, অ্যানিমেটেড: বুল)

  3. সুপার সেটআপের সুবিধা পেতে সুপারকে কল করুন।

    সুপার.সেটহাইটলাইট (হাইলাইটেড, অ্যানিমেটেড: অ্যানিমেটেড)

  4. আপনি যা চান তা যুক্তি হাইলাইট করুন Do

    override func setHighlighted(_ highlighted: Bool, animated: Bool) {
          super.setHighlighted(highlighted, animated: animated)
          // Your Highlighting Logic goes here...
    }

3

ইউআইটিএবলভিউসেল কোনও কারণে নির্বাচনের জন্য সমস্ত সাবভিউয়ের পটভূমির রঙ পরিবর্তন করে।

এটি সাহায্য করতে পারে:

DVColorLockView

নির্বাচনের সময় ইউআইটিএবলভিউকে আপনার দর্শন রঙ পরিবর্তন করা থেকে বিরত রাখতে এমন কিছু ব্যবহার করুন।


1

পটভূমির রঙ সেট করার পরিবর্তে ভিউ আঁকুন

import UIKit

class CustomView: UIView {

    var fillColor:UIColor!

    convenience init(fillColor:UIColor!) {
        self.init()
        self.fillColor = fillColor
    }

    override func drawRect(rect: CGRect) {
        if let fillColor = fillColor {
            let context = UIGraphicsGetCurrentContext()
            CGContextSetFillColorWithColor(context, fillColor.CGColor);
            CGContextFillRect (context, self.bounds);

        }
    }


}

1

অ্যানিমেশন সহ বাগগুলি ছাড়াই সহজ সমাধান (শীর্ষ রেটযুক্ত উত্তরের মতো) এবং সাবক্লাসিং এবং অঙ্কন ছাড়াই - ব্যাকগ্রাউন্ড কালারের পরিবর্তে স্তরটির সীমানা রঙ সেট করুন এবং খুব বড় সীমানার প্রস্থ সেট করুন।

colorThumb.layer.cornerRadius = 6
colorThumb.layer.borderWidth = colorThumb.frame.width
colorThumb.layer.borderColor = value.color

0

নিম্নলিখিত কোড ব্যবহার করে দেখুন:

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{     
[super setHighlighted:highlighted animated:animated];
//Set your View's Color here.
}

0

setSelectedপাশাপাশি ওভাররাইড করতে ভুলবেন নাsetHighlighted

override func setHighlighted(highlighted: Bool, animated: Bool) {

    super.setHighlighted(highlighted, animated: animated)
    someView.backgroundColor = .myColour()
}

override func setSelected(selected: Bool, animated: Bool) {

    super.setSelected(selected, animated: animated)
    someView.backgroundColor = .myColour()
}

0

এটি পাভেল গুরভের উত্তরের মতো, তবে এটি আরও নমনীয় যে কোনও রঙ স্থায়ী হতে দেয় to

class PermanentBackgroundColorView: UIView {
    var permanentBackgroundColor: UIColor? {
        didSet {
            backgroundColor = permanentBackgroundColor
        }
    }

    override var backgroundColor: UIColor? {
        didSet {
            if backgroundColor != permanentBackgroundColor {
                backgroundColor = permanentBackgroundColor
            }
        }
    }
}

0

আমি স্বয়ংক্রিয় পটভূমির রঙ পরিবর্তনটি উপেক্ষা করতে চেয়েছিলাম এমন একটি সেল সাবভিউ বাদ দিয়ে আমি ডিফল্ট নির্বাচনের আচরণটি রাখতে চেয়েছিলাম। তবে অন্যান্য সময়ে আমার পটভূমির রঙ পরিবর্তন করতে সক্ষম হওয়া দরকার।

আমি যে সমাধানটি নিয়ে এসেছি UIViewতা হ'ল সাবক্লাসটি যাতে এটি পটভূমির রঙটি সাধারণত সেট করা উপেক্ষা করে এবং সুরক্ষাটিকে বাইপাস করার জন্য একটি পৃথক ফাংশন যুক্ত করে।

সুইফট 4

class MyLockableColorView: UIView {
    func backgroundColorOverride(_ color: UIColor?) {
            super.backgroundColor = color
    }

    override var backgroundColor: UIColor? {
        set {
            return
        }
        get {
            return super.backgroundColor
        }
    }
}

-1

এখানে আমার সমাধান রয়েছে, নির্বাচনকালীন রঙ দেখানোর জন্য সামগ্রী সামগ্রী দেখুন use এটি পুরোপুরি কার্যকর

#import "BaseCell.h"

@interface BaseCell ()
@property (nonatomic, strong) UIColor *color_normal;
@property (nonatomic, assign) BOOL needShowSelection;
@end


@implementation BaseCell
@synthesize color_customSelection;
@synthesize color_normal;
@synthesize needShowSelection;

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self setup];
}

- (void)setup
{
    //save normal contentView.backgroundColor
    self.color_normal = self.backgroundColor;
    if (self.color_normal == nil) {
        self.color_normal = [UIColor colorWithRGBHex:0xfafafa];
    }
    self.color_customSelection = [UIColor colorWithRGBHex:0xF1F1F1];
    self.accessoryView.backgroundColor = [UIColor clearColor];
    if (self.selectionStyle == UITableViewCellSelectionStyleNone) {
        needShowSelection = NO;
    }
    else {
        //cancel the default selection
        needShowSelection = YES;
        self.selectionStyle = UITableViewCellSelectionStyleNone;
    }
}

/*
 solution is here
 */
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesBegan:touches withEvent:event];
    if (needShowSelection) {
        self.contentView.backgroundColor = self.backgroundColor = color_customSelection;
    }
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesCancelled:touches withEvent:event];
    if (needShowSelection) {
        self.contentView.backgroundColor = self.backgroundColor = color_normal;
    }
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];
    if (needShowSelection) {
        UIColor *color  = selected ? color_customSelection:color_normal;
        self.contentView.backgroundColor = self.backgroundColor = color;
    }
}

-1

আপনার সাবক্লাসে এই কোডটি রাখুন UITableViewCell

সুইফট 3 সিনট্যাক্স

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    if(selected) {
        lockerSmall.backgroundColor = UIColor.init(red: 233/255, green: 106/255, blue: 49/255, alpha: 1.0)
    }
}


override func setHighlighted(_ highlighted: Bool, animated: Bool) {
    super.setHighlighted(highlighted, animated: animated)

    if(highlighted) {
        lockerSmall.backgroundColor = UIColor.init(red: 233/255, green: 106/255, blue: 49/255, alpha: 1.0)
    }
}

-1

আপনি স্টোরিবোর্ড ব্যবহার করছেন তবে অন্য সমাধান যুক্ত করা হচ্ছে। এর একটি সাবক্লাস তৈরি করুন এটি প্রাথমিকভাবে সেট হওয়ার পরে সেটটি সেট করার UIViewঅনুমতি দেয় না backgroundColor

@interface ConstBackgroundColorView : UIView

@end

@implementation ConstBackgroundColorView

- (void)setBackgroundColor:(UIColor *)backgroundColor {
    if (nil == self.backgroundColor) {
        [super setBackgroundColor:backgroundColor];
    }
}

@end

-1

যদি উপরে উল্লিখিত পটভূমি সমাধানটি আপনার সমস্যার সমাধান না করে, আপনার সমস্যাটি datasourceআপনার টেবিলভিউয়ের জন্য থাকতে পারে ।

আমার জন্য, আমি BoxDataSourceপ্রতিনিধি এবং ডেটাসোর্স টেবিলভিউ পদ্ধতিগুলি হ্যান্ডেল করার জন্য একটি ডেটাসোর্স অবজেক্টের (বলা ) একটি উদাহরণ তৈরি করছিলাম:

//In cellForRowAtIndexPath, when setting up cell
let dataSource = BoxDataSource(delegate: self)
cell.tableView.dataSource = dataSource
return cell

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

এটি ঠিক করতে, আমাকে কাস্টম ঘরে যেতে হবে, একটি ডেটাসোর্স ভেরিয়েবল যুক্ত করতে হবে:

//CustomCell.swift
var dataSource: BoxDataSource?

তারপরে, আপনাকে সেলফোর্ডে varসবেমাত্র তৈরি করেছেন এমন কোষের ডেটাসোর্সে আপনার ডেটাসোর্স সেট করতে হবে, সুতরাং এটি আরসি-র সাথে বিচ্ছিন্ন নয়।

cell.statusDataSource = BoxAssigneeStatusDataSource(delegate: self)
cell.detailsTableView.dataSource = cell.statusDataSource
return cell

আশা করি এইটি কাজ করবে.

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