ইউআইটিবেলভিউ: কিছু সারি তবে অন্যদের জন্য নির্বাচন কীভাবে অক্ষম করবেন


298

আমি tableviewএক্সএমএল থেকে পার্স করা একটি গ্রুপ বিষয়বস্তুতে প্রদর্শিত করছি । আমি এটিতে ক্লিক ইভেন্টটি অক্ষম করতে চাই (আমি এটিতে মোটেও ক্লিক করতে সক্ষম হব না) সারণীতে দুটি গ্রুপ রয়েছে। আমি প্রথম গ্রুপের জন্য নির্বাচনটি অক্ষম করতে চাই তবে দ্বিতীয় গ্রুপ নয় not navigatesআমার টিউবে দ্বিতীয় গ্রুপের প্রথম সারিটি ক্লিক করা player view

আমি কীভাবে সুনির্দিষ্ট গোষ্ঠী বা সারিগুলি নির্বাচনযোগ্য করতে পারি?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if(indexPath.section!=0)
    if(indexPath.row==0)    

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:tubeUrl]];   
}

ধন্যবাদ।

উত্তর:


499

আপনাকে কেবল এই কোডটি প্রবেশ করতে হবে cellForRowAtIndexPath

কক্ষের নির্বাচনের বৈশিষ্ট্যটি অক্ষম করতে: (ঘরটি ট্যাপ করার সময়)

cell.selectionStyle = UITableViewCellSelectionStyleNone;

ঘরটি নির্বাচন করতে সক্ষম হয়ে সক্ষম করতে (আলতো চাপুন): (ঘরটি আলতো চাপছে)

// Default style
cell.selectionStyle = UITableViewCellSelectionStyleBlue;

// Gray style
cell.selectionStyle = UITableViewCellSelectionStyleGray;

মনে রাখবেন যে ব্যবহারকারীর দ্বারা selectionStyle = UITableViewCellSelectionStyleNone;স্পর্শকৃত একটি ঘর এখনও ইউআইকে কল করবে didSelectRowAtIndexPath। এটি এড়াতে নীচের পরামর্শ মতো করুন এবং সেট করুন।

cell.userInteractionEnabled = NO;

পরিবর্তে. এছাড়াও নোট করুন যে আপনি cell.textLabel.enabled = NO;আইটেমটি ধূসর করতে চাইবেন ।


1
আপনি মুছে ফেলতে সোয়াইপ করার চেষ্টা করলে এই পদ্ধতিটি বাগ তৈরি করবে।
ভিভ করুন

116
এই হ্যাক! এটি করুন, নীচের উত্তরটি ব্যবহার করুন - উইলসিলিচারআউটআইডেক্সপথটি ব্যবহার করে ফিরে আসুন!
পিটার স্ট্যাজার

4
ব্যবহারকারীর অন্তর্ভুক্তকরণযোগ্য স্টাফগুলি সঠিক নয়, এর পরিবর্তে লোকেরা নোট হিসাবে চিহ্নিত করবে উইলসিলেটআরএন্টইন্ডেক্সপথ।
জনি 11

23
আইওএস 6.০ এবং তারপরে, tableView:shouldHighlightRowAtIndexPath:একটি নতুন UITableViewDelegateপদ্ধতি যা BOOLপাস indexPathহাইলাইট করা উচিত কিনা তার ভিত্তিতে একটি ফেরত দেয় । আপনি যদি 6.0 এবং তার পরে তৈরি করে থাকেন তবে আমি দৃ new়ভাবে এই নতুন এপিআইয়ের প্রস্তাব দিচ্ছি।
cbowns

3
আপনি যদি সুইফটে এটি করছেন এবং আপনার যদি সমস্যা হচ্ছে তবে আপনি এখানেই শেষ হয়ে cell!.selectionStyle = .Noneগেছেন, আপনাকে কোনও ঘরটি আনপ্র্যাপ করে সেট করতে হবে যা আপনাকে তার বৈশিষ্ট্যগুলিতে অ্যাক্সেস করার অনুমতি দেয়।
মার্কোস

371

আপনি যদি একটি সারি (বা সারিগুলির উপসেট) অ- বাছাইযোগ্য করতে চান তবে UITableViewDelegateপদ্ধতিটি প্রয়োগ করুন -tableView:willSelectRowAtIndexPath:(টেকজেনও উল্লেখ করেছেন)। যদি এটি নির্বাচনযোগ্যindexPath না হয় তবে ফিরে আসুনnil , অন্যথায় এটি ফিরিয়ে দিন indexPath। ডিফল্ট নির্বাচনের আচরণ পেতে, আপনি কেবল indexPathআপনার delegateপদ্ধতিতে পাসটি ফিরিয়ে দেন , তবে আপনি কোনও আলাদা করেও সারি নির্বাচন পরিবর্তন করতে পারেন indexPath

উদাহরণ:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // rows in section 0 should not be selectable
    if ( indexPath.section == 0 ) return nil;

    // first 3 rows in any section should not be selectable
    if ( indexPath.row <= 2 ) return nil;

    // By default, allow row to be selected
    return indexPath;
}

2
ছোট বিবরণ: আপনি << 2, নয় = <২. খারাপ হাসি! :)
জোনাস বাইস্ট্রোম

23
আমি এটিও যুক্ত করতে চাই যে এটি সঠিক উত্তর, তবে আপনার জন্য সেলফোরআউটিআইডেক্সপ্যাথে UITableViewCellSelectionStyleNone এ নির্বাচন স্টাইলটি সেট করা উচিত। কেন? কারণ এই নির্বাচনের শৈলী ব্যতীত ঘরটি নির্বাচন করা যায় না তবে এটি স্পর্শ করার সময় "নির্বাচিত হিসাবে" প্রদর্শিত হবে (সুতরাং এটি অন্য নির্বাচিত রঙে পরিবর্তিত হয়, যদি অন্য কক্ষগুলির জন্য একটি থাকে)
TooManyEduardos

4
এটির স্বীকৃত উত্তরের চেয়ে আরও বেশি কিছু হওয়া উচিত
ব্যবহারকারী 1244109

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

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

61

আইওএস 6 থেকে শুরু করে আপনি ব্যবহার করতে পারেন

-tableView:shouldHighlightRowAtIndexPath:

আপনি যদি ফিরে যান NOতবে এটি নির্বাচন হাইলাইটিং এবং স্টোরিবোর্ড উভয়ই সেই ঘরের সাথে সংযুক্ত সেগগুলি ট্রিগার করে dis

একটি সারিটিতে একটি স্পর্শ নেমে আসলে পদ্ধতিটি বলা হয়। NOসেই বার্তায় ফিরে যাওয়া নির্বাচন প্রক্রিয়াটি থামিয়ে দেয় এবং স্পর্শটি ডাউন থাকাকালীন বর্তমানে নির্বাচিত সারিটি তার নির্বাচিত চেহারাটি হারাতে পারে না।

UITableViewDelegate প্রোটোকল রেফারেন্স


3
একমত। আইওএস 7 এর জন্য এবং
তারও বেশি

এটি শীর্ষ উত্তর হওয়া উচিত।
ক্যামেরন ই

16

উপরের উত্তরগুলি থেকে সত্যই সঠিকভাবে সমস্যার সমাধান করা যায় না। কারণটি হ'ল আমরা ঘরের নির্বাচনটি অক্ষম করতে চাই তবে প্রয়োজনীয় কক্ষের অভ্যন্তরের সাবভিউগুলি নয়।

আমার ক্ষেত্রে আমি সারিটির মাঝখানে একটি ইউআইএসভিচ উপস্থাপন করছিলাম এবং আমি সারিটির বাকি অংশের জন্য নির্বাচনটি অক্ষম করতে চেয়েছিলাম (যা খালি) তবে স্যুইচের জন্য নয়! এটি করার সঠিক পদ্ধতিটি পদ্ধতিতে তাই

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

যেখানে ফর্ম একটি বিবৃতি

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

নির্দিষ্ট কক্ষের জন্য নির্বাচনটি অক্ষম করে যখন একই সময়ে ব্যবহারকারীকে স্যুইচটি চালিত করতে এবং সেইজন্য উপযুক্ত নির্বাচনকারীকে ব্যবহার করতে দেয়। যদি কেউ এর মাধ্যমে ব্যবহারকারীর মিথস্ক্রিয়া অক্ষম করে তবে এটি সত্য নয়

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

এমন পদ্ধতি যা কেবলমাত্র ঘর প্রস্তুত করে এবং ইউআইএসভিচের সাথে মিথস্ক্রিয়াটিকে অনুমতি দেয় না।

তাছাড়া, পদ্ধতিটি ব্যবহার করে

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

ফর্মের একটি বিবৃতি সহ ঘরটি অনির্বাচিত করতে

[tableView deselectRowAtIndexPath:indexPath animated:NO];

ব্যবহারকারীর ঘরের আসল কন্টেন্টভিউতে টিপে থাকা অবস্থায় সারিটি নির্বাচিত হওয়া দেখায়।

শুধু আমার দুই সেন্ট। আমি যথেষ্ট নিশ্চিত যে অনেকে এটি দরকারী হিসাবে পাবেন।


একমত। এবং ফিরে আসার willSelectRowAtIndexPathএকই সমস্যা রয়েছে, সাবভিউগুলি নির্বাচনযোগ্য নয়।
jeffjv

এছাড়াও মনে রাখবেন যে আপনার যদি একটি স্থিতিশীল টেবিল থাকে তবে আপনি যে ঘরটি নির্বাচন করতে চান না সেগুলির জন্য ইন্টারফেস বিল্ডারের মধ্যে কেবল কোনওটিকেই নির্বাচন সেট করতে পারেন।
jeffjv

11

আপনি এই ডেটা উত্স পদ্ধতিতে নির্বাচনগুলি ফাঁদে ফেলুন।

 tableView:willSelectRowAtIndexPath: 
 tableView:didSelectRowAtIndexPath: 
 tableView:willDeselectRowAtIndexPath: 
 tableView:didDeselectRowAtIndexPath:

এই পদ্ধতিগুলিতে, আপনি নির্বাচিত সারিটি নির্বাচনযোগ্য হতে চান কিনা তা পরীক্ষা করুন। যদি তা হয় তবে কোনও পদক্ষেপ নিন, না হলে কিছুই করবেন না।

দুর্ভাগ্যক্রমে, আপনি কেবল একটি বিভাগের জন্য নির্বাচন বন্ধ করতে পারবেন না। এটি পুরো টেবিল বা কিছুই না।

আপনি তবে সারণী ঘরগুলির selectionStyleবৈশিষ্ট্য এতে সেট করতে পারেন UITableViewCellSelectionStyleNone। আমি বিশ্বাস করি যে এটি নির্বাচনকে অদৃশ্য করে তুলবে। উপরোক্ত পদ্ধতির সাথে একত্রিত যা ব্যবহারকারীর দৃষ্টিকোণ থেকে কোষগুলি সম্পূর্ণ জড় দেখাচ্ছে look

Edit01:

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

তবে আপনি এটি করেন তবে আপনি চান না যে আপনার ব্যবহারকারীরা সারিগুলি নির্বাচন করার চেষ্টা করছেন এবং ভাবছেন অ্যাপটি নষ্ট হয়েছে কারণ সারিটি কিছুই করে না।


দয়া করে কীভাবে এই পদ্ধতিগুলি ব্যবহার করবেন বা কিছু নমুনা প্রোগ্রামের লিঙ্কগুলি দেওয়া যায়
ওয়ারিয়র

2
@ ওয়ারিয়র: আপনি যদি এসডিকে ইনস্টল করে থাকেন তবে আপনি এক্সকোড খুলতে পারেন, যান Help -> Developer documentation, তারপরে কীভাবে এটি কাজ করে তা অনুসন্ধান ক্ষেত্রের মধ্যে method পদ্ধতির নামগুলি অনুলিপি করুন। বিকাশকারী ডকুমেন্টেশনেও নমুনা কোড থাকে।
কেনেটিএম


9

cellForRowAtIndexPathপদ্ধতির মধ্যে ঘর নির্বাচনটি অক্ষম করতে আপনাকে নীচের মতো কিছু করতে হবে :

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[cell setUserInteractionEnabled:NO];

ঘরটি ধূসর করে দেখানোর জন্য, tableView:WillDisplayCell:forRowAtIndexPathপদ্ধতিটির মধ্যে নিম্নলিখিতটি লিখুন :

[cell setAlpha:0.5];

একটি পদ্ধতি আপনাকে ইন্টারঅ্যাক্টিভিটি নিয়ন্ত্রণ করতে দেয়, অন্যটি আপনাকে ইউআই উপস্থিতি নিয়ন্ত্রণ করতে দেয়।


5

কেবলমাত্র কয়েকটি ঘর নির্বাচন করা বন্ধ করতে:

cell.userInteractionEnabled = NO;

নির্বাচন বাধা দেওয়ার পাশাপাশি এটি টেবিল ভিউ: ডায়সিলিটরউএটিআইডেক্সপ্যাথ: এটি সেট করা ঘরগুলির জন্য ডাকা হচ্ছে।


1
একটি অদ্ভুত জিনিসটি সর্বদা ঘটে থাকে: যখন আমি userInteractionEnabledএকটি ঘরে (কোনও স্পষ্টতই, একটি সূচকপথ) NO সেট না করি, তখন অন্য কয়েকটি কোষের ব্যবহারকারীর ইন্টারঅ্যাকশন অক্ষম থাকে। আমি যখনই userInteractionEnabledটেবিল ভিউ সেলগুলিতে ব্যবহার করি তখন কেন এমন হয় তা আমার কোনও ধারণা নেই । এটি একটি পরিচিত বাগ বা আমি কিছু ভুল করেছি?
ফিলিপ 007

3
@ ফিলিপ007 "কী" ঘরগুলি পুনরায় ব্যবহার করা হচ্ছে? যদি তাই হয় তবে আপনার কোনও ঘরটি শোনার সময় আপনার অবশ্যই এটি "হ্যাঁ" এ সেট করার বিষয়টি নিশ্চিত করতে হবে।
জোসেফ এইচ

1
কেন এটি "হ্যাঁ" এ সেট করবেন? আমি এটিটি না হয়ে থাকতে চাই (ব্যবহারকারীর মিথস্ক্রিয়াটিকে অস্বীকার করুন) .. একটি সাধারণ উদাহরণ হ'ল আমি ঘরটি সন্ধানের পরে প্রথম সারিতে ( if [indexPath row] == 0) ব্যবহারকারীর ইন্টারঅ্যাকশন সেট করেছিলাম । এটি সাধারণত প্রথমে ঠিক আছে। তারপরে বেশ কয়েকটি কল করার পরে হঠাৎ পঞ্চম সারিটি মিথস্ক্রিয়াকে নিষিদ্ধ করা হয়, তারপরে চতুর্থ সারিতে .. কখন হবে তা আমি বুঝতে পারি না। পুরো জিনিস এলোমেলো দেখাচ্ছে। NOtableView:cellForRowAtIndexPath:reloadData
ফিলিপ 007

6
@ Philip007 আপনি কোষ পুনঃব্যবহার হয়, আপনি কোষ তোমার জন্য "হ্যাঁ" এটি পুনরায় সেট করতে হবে না ইন্টারেক্টিভ হতে চাই। অন্যথায় যদি কোনও "NO" ঘরটি পর পর ব্যবহার করা হয় যা আপনি ইন্টারেক্টিভ হতে চান তবে তা অক্ষম থাকবে। যেমন:if [indexPath row] == 0) { set to NO } else { set to YES }
জোসেফ এইচ

5

আপনি tableView:willDisplayCellটেবিলভিউসেলটিতে সমস্ত ধরণের কাস্টমাইজেশন করতে পদ্ধতিটি ব্যবহার করতে পারেন ।

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
     [cell setUserInteractionEnabled:NO];

     if (indexPath.section == 1 && indexPath.row == 0)
     {
         [cell setSelectionStyle:UITableViewCellSelectionStyleGray];
         [cell setUserInteractionEnabled:YES];
     }
} 

উপরের এই কোডটিতে, ব্যবহারকারী কেবল টেবিলভিউয়ের দ্বিতীয় বিভাগে প্রথম সারিটি নির্বাচন করতে পারেন। বাকি সমস্ত সারি নির্বাচন করা যায় না। ধন্যবাদ! ~



5

ডেটা মডেলের উপর ভিত্তি করে আমার সমাধান:

func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
    let rowDetails = viewModel.rowDetails(forIndexPath: indexPath)
    return rowDetails.enabled ? indexPath : nil
}

func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
    let rowDetails = viewModel.rowDetails(forIndexPath: indexPath)
    return rowDetails.enabled
}

5

দ্রুত 4.0 এর জন্য এটি কৌশলটি করবে। এটি সেলেডরোউএটিআইডেক্সপথ পদ্ধতিতে সেলটি অক্ষম করবে তবে সাবউভিউগুলিকে ক্লিকযোগ্য রাখবে।

func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
         if (indexPath.row == clickableIndex ) { 
            return indexPath
         }else{
            return nil
        }
    }

বা সংক্ষেপে return indexPath.row == clickableIndex ? indexPath : nil:, আপনার কোডটি কিছুটা পরিষ্কার রাখে ;-)
চিহ্নিত করুন

1

কক্ষটি দেখতে অক্ষম এবং অ-নির্বাচনযোগ্য-এর মতো দেখতে এটি ব্যবহার করুন :

cell.selectionStyle = UITableViewCellSelectionStyleNone;

গুরুত্বপূর্ণ: দ্রষ্টব্য যে এটি কেবল একটি স্টাইলিং সম্পত্তি, এবং প্রকৃতপক্ষে ঘরটি অক্ষম করে না। এটি করার জন্য, আপনাকে selectionStyleআপনার didSelectRowAtIndexPath:প্রতিনিধি প্রয়োগের জন্য যাচাই করতে হবে :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if(cell.selectionStyle == UITableViewCellSelectionStyleNone) {
        return;
    }

    // do your cell selection handling here
}

1

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

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.selectionStyle == UITableViewCellSelectionStyleNone)
        return nil;

    else
        return indexPath;
}

1

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

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if (cell.accessoryType != UITableViewCellAccessoryDisclosureIndicator) {
        return nil;
    }
    return indexPath;
}

1

কোডিং ছাড়াই এক্সকোড 7 এ আপনি কেবল নিম্নলিখিতটি করতে পারেন:

বাহ্যরেখা ভিউতে, সারণী দর্শন ঘরটি নির্বাচন করুন। (ঘরটি টেবিল ভিউ নিয়ন্ত্রক দৃশ্যের নীচে> টেবিল ভিউ কন্ট্রোলার> টেবিল ভিউ এর অধীনে থাকে ested টেবিল ভিউ সেলটি দেখতে আপনাকে এই জিনিসগুলি প্রকাশ করতে হতে পারে)

বৈশিষ্ট্য পরিদর্শকটিতে, নির্বাচন লেবেলযুক্ত ক্ষেত্রটি সন্ধান করুন এবং কোনওটিই নির্বাচন করুন না। পরিদর্শককে এট্রিবিউট করুন এই বিকল্পের সাহায্যে, কোনও ব্যবহারকারী যখন এটিকে কল করেন তখন সেলটি ভিজ্যুয়াল হাইলাইটটি পাবে না।


0

সহজ

cell.userInteractionEnabled = YES;সেলটি যদি নেভিগেট করতে পারে তবে তা ব্যবহার করুন এবং cell.userInteractionEnabled = NO;অন্যথায়


1
এটি ঘরের মধ্যে কোনও আনুষঙ্গিক দৃশ্যের সাথে ইন্টারঅ্যাকশনকে বাধা দেয়, এটি পছন্দসই আচরণ নাও হতে পারে।
গ্রেগ ব্রাউন

0

tableView:willSelectRowAtIndexPath: আপনার টেবিলের জন্য ডেটা উত্সে কেবল পদ্ধতিটি প্রয়োগ করুন । আপনি যদি হাইলাইট করার পথে সারিটি চান তবে প্রদত্ত সূচকপথটি ফিরিয়ে দিন। আপনি যদি না, শূন্য ফিরে।

আমার অ্যাপ্লিকেশন থেকে উদাহরণ:

- (NSIndexPath *)tableView:(UITableView *)tableView
    willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MySelectableObj* obj = [self objectAtPath:indexPath];
    if(obj==nil) return nil;
    return indexPath;
}

এই সম্পর্কে দুর্দান্ত জিনিসটি হ'ল shouldPerformSegueWithIdentifier:sender:উপরের পদ্ধতিটি যদি শূন্য হয় তবে ডাকা হবে না, যদিও আমি কেবল সম্পূর্ণতার জন্য উপরের পরীক্ষার পুনরাবৃত্তি করছি।



0

আমি ব্রায়ানের উত্তরের সাথে একমত

যদি আমি করি

cell.isUserInteractionEnabled = false 

তারপরে ঘরের মধ্যে থাকা সংক্ষিপ্তসারগুলি ব্যবহারকারীর সাথে যোগাযোগ করা হবে না।

অন্য সাইটে, সেটিং

cell.selectionStyle = .none

নির্বাচনের রঙ আপডেট না করেও didSelect পদ্ধতিটি ট্রিগার করবে।

উইলসিলেকটআউটটি ব্যবহার করা আমি আমার সমস্যার সমাধান করার উপায়। উদাহরণ:

func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {

    if indexPath.section == 0{

        if indexPath.row == 0{
            return nil
        }

    }
    else if indexPath.section == 1{

        if indexPath.row == 0{
            return nil
        }

    }

    return indexPath

}

0

আপনার কাছ থেকে প্রযোজ্য tableView.allowsMultipleSelection = trueবিভাগটি নির্বাচন করার সময় বিভাগের বাকী ঘরগুলি অনির্বাচিত করা দরকার:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.section does not support multiple selection {
        // deselect the rest of cells
        tableView
            .indexPathsForSelectedRows?.compactMap { $0 }
            .filter { $0.section == indexPath.section && $0.row != indexPath.row }
            .forEach { tableView.deselectRow(at: $0, animated: true) }
    }
}

-1

সুইট ৩.০ এর জন্য আপনি ইউআইটিএবলভিউ সেলটিতে ব্যবহারকারীর মিথস্ক্রিয়া অক্ষম করতে কোডের নীচে ব্যবহার করতে পারেন

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