আপনি যখন একটিতে একটি সারিটি ট্যাপ করেন UITableView
, সারিটি হাইলাইট এবং নির্বাচন করা হয়। একটি সারি আলতো চাপার ফলে কি কিছুই নিষ্ক্রিয় হয় না?
আপনি যখন একটিতে একটি সারিটি ট্যাপ করেন UITableView
, সারিটি হাইলাইট এবং নির্বাচন করা হয়। একটি সারি আলতো চাপার ফলে কি কিছুই নিষ্ক্রিয় হয় না?
উত্তর:
আমার জন্য, নিম্নলিখিতটি ভাল কাজ করেছে:
tableView.allowsSelection = false
এর অর্থ didSelectRowAt#
সহজভাবে কাজ করবে না। এর অর্থ হল, টেবিলের একটি সারি স্পর্শ করা, পুরোপুরি কিছুই করবে না। (এবং তাই স্পষ্টতই, এখানে কখনও নির্বাচিত-অ্যানিমেশন থাকবে না))
(দ্রষ্টব্য, যদি ঘরগুলিতে, আপনার UIButton
বা অন্য কোনও নিয়ন্ত্রণ থাকে তবে অবশ্যই সেই নিয়ন্ত্রণগুলি এখনও কাজ করবে the টেবিল সেলটিতে আপনার যে কোনও নিয়ন্ত্রণগুলি ঘটে, এটি ইউআইটিএবলভিউর আপনাকে "একটি সারি নির্বাচন করার" অনুমতি দেওয়ার ক্ষমতাকে সম্পূর্ণ সম্পর্কযুক্ত নয়) ব্যবহার didSelectRowAt#
।)
আরেকটি বিষয় লক্ষণীয়: UITableView
এডিট মোডে থাকা অবস্থায় এটি কাজ করে না । সম্পাদনা মোডে ঘর নির্বাচন সীমাবদ্ধ করতে নীচের মতো কোডটি ব্যবহার করুন:
tableView.allowsSelectionDuringEditing = false
selectionStyle
আপনার ঘরটিতে সম্পত্তি সেট করতে হবে : cell.selectionStyle = UITableViewCellSelectionStyle.None
সুইফ্টে বা cell.selectionStyle = UITableViewCellSelectionStyleNone
উদ্দেশ্য-সি তে in
tableView.allowSelection = false
tableViewDidSelectRowAtIndexPath
, cell.selectionStyle = .None
তা পছন্দসই। যদি আপনি না চান বা সেই প্রতিনিধি ফাংশনটি কল করার জন্য যত্ন নিচ্ছেন (যেমন একটি টেবিলভিউসেলটিতে একটি পাঠ্যক্ষেত্র রয়েছে) সেটিংস tableView.allowsSelection = false
ঠিক আছে।
আপনাকে যা করতে হবে তা হ'ল হয় নির্বাচনের শৈলীটি সেট UITableViewCell
ব্যবহার করে:
উদ্দেশ্য গ:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
অথবা
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
সুইফট 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
সুইফট 3 এবং 4.x:
cell.selectionStyle = .none
আরও নিশ্চিত করুন যে আপনি হয় -tableView:didSelectRowAtIndexPath:
নিজের টেবিল ভিউ ডেলিগেটে বাস্তবায়ন করেন না বা আপনি যদি সেগুলি প্রয়োগ করেন তবে আপনার কোনও পদক্ষেপ নিতে চান এমন কক্ষগুলি স্পষ্টভাবে বাদ দিন।
কারণ আমি সম্প্রতি এই পোস্টটি পড়েছি এবং এটি আমাকে সহায়তা করেছে, আমি উত্তরগুলি (উত্তরোত্তর জন্য) একীভূত করার জন্য আরও একটি উত্তর পোস্ট করতে চেয়েছিলাম।
সুতরাং, আপনার কাঙ্ক্ষিত যুক্তি এবং / বা ফলাফলের উপর নির্ভর করে আসলে 5 টি পৃথক উত্তর রয়েছে:
1. ঘরের অন্য কোনও মিথস্ক্রিয়া পরিবর্তন না করে নীল হাইলাইটিং অক্ষম করতে:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
আমি যখন ইউআইটি বাটন - বা অন্য কোনও নিয়ন্ত্রণ (গুলি) - কোনও ইউআইটিবেলভিউসেলটিতে হোস্ট করি তখন আমি এটি ব্যবহার করি এবং আমি চাই যে ব্যবহারকারী নিয়ন্ত্রণের সাথে ইন্টারঅ্যাক্ট করতে সক্ষম হবে তবে সেলটি নিজেই নয়।
দ্রষ্টব্য : যেমন টনি মিলিয়ন উপরে উল্লিখিত হয়েছে, এটি প্রতিরোধ করে নাtableView:didSelectRowAtIndexPath:
। আমি প্রায়শই "যদি" বিবৃতি দিয়ে প্রায়শই পাই, প্রায়শই বিভাগটির জন্য পরীক্ষা করা এবং নির্দিষ্ট বিভাগের জন্য ক্রিয়া এড়ানো।
এইরকম একটি ঘরে আলতো চাপার জন্য আমি পরীক্ষা করার জন্য অন্য উপায়টি ভেবেছিলাম:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// A case was selected, so push into the CaseDetailViewController
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
// Handle tap code here
}
}
পুরো টেবিলের জন্য এটি করতে, আপনি টেবিলের প্রতিটি কক্ষে উপরের সমাধানটি প্রয়োগ করতে পারেন, তবে আপনি এটিও করতে পারেন:
[tableView setAllowsSelection:NO];
আমার পরীক্ষায় এটি এখনও এর অভ্যন্তরে নিয়ন্ত্রণগুলি UITableViewCell
ইন্টারেক্টিভ হওয়ার অনুমতি দেয় ।
৩. কোনও সেলকে "কেবল পঠনযোগ্য" করতে, আপনি কেবল এটি করতে পারেন:
[cell setUserInteractionEnabled:NO];
4. একটি সম্পূর্ণ টেবিল "কেবল পঠনযোগ্য" করতে
[tableView setUserInteractionEnabled:NO];
৫. কোনও সেল হাইলাইট করতে হবে কিনা তা ফ্লাইটে নির্ধারণ করতে (যা এই উত্তর অনুসারে নির্বাচিতভাবে অন্তর্ভুক্ত রয়েছে), আপনি নিম্নলিখিত UITableViewDelegate
প্রোটোকল পদ্ধতিটি প্রয়োগ করতে পারেন :
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
tableView:shouldHighlightRowAtIndexPath:
, যা সাধারণত (সর্বদা নয়) আমার পছন্দসই পদ্ধতি।
আমি বিশ্বাস করি এর সংক্ষিপ্ত বিবরণে এটি বাস্তবায়নের আমার নিজের অভিজ্ঞতার ভিত্তিতে সঠিক উত্তরগুলি রয়েছে:
আপনি যদি কেবল কয়েকটি ঘরের জন্য নির্বাচনটি অক্ষম করতে চান তবে ব্যবহার করুন:
cell.userInteractionEnabled = NO;
নির্বাচন বাধা দেওয়ার পাশাপাশি এটি টেবিল ভিউ: ডায়সিলিটরউএটিআইডেক্সপ্যাথ: এটি সেট করা কক্ষগুলির জন্য ডাকা হচ্ছে। (এই উত্তরের জন্য ক্রেডিট টনি মিলিয়নে যায়, ধন্যবাদ!)
আপনার ঘরে যদি আপনার বোতামে ক্লিক করতে হয় তবে আপনার পরিবর্তে এটি করা দরকার:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
এবং আপনাকে ঘরে প্রবেশের কোনও ক্লিক উপেক্ষা করতে হবে - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
।
আপনি যদি পুরো টেবিলের জন্য নির্বাচনটি অক্ষম করতে চান তবে ব্যবহার করুন:
tableView.allowsSelection = NO;
(পাওলো দে ব্যারোসকে ধন্যবাদ, ধন্যবাদ!)
আইওএস 6.0 হিসাবে, UITableViewDelegate
আছে tableView:shouldHighlightRowAtIndexPath:
। (আইওএস ডকুমেন্টেশনে এটি সম্পর্কে পড়ুন ))
এই পদ্ধতিটি আপনাকে নির্দিষ্ট সারিগুলি ঘরের নির্বাচনের স্টাইলটি পরিবর্তন না করে, কোষের ইভেন্টের হ্যান্ডলিংয়ের সাথে বিশৃঙ্খলা না করে userInteractionEnabled = NO
বা এখানে নথিভুক্ত অন্য কোনও কৌশল অবলম্বন না করে অবিশ্বাস্যরূপে চিহ্নিত করতে দেয় (এবং স্পষ্টতই, অপছন্দযোগ্য) mark
নীচের ছবিতে প্রদর্শিত ইন্সপেক্টর ফলকে বিকল্পটি (ইউআইটিএলভিউ প্রোপার্টি) NoSelection
থেকে পছন্দ করে আপনি ইন্টারফেস বিল্ডার থেকে সারি নির্বাচনও অক্ষম করতে পারেন Youselection
আপনি যদি নির্বাচনটি কেবল ফ্ল্যাশ করতে চান তবে নির্বাচিত অবস্থায় না থেকে, আপনি কল করতে পারেন in
didSelectRowAtIndexPath
অনুসরণ
[tableView deselectRowAtIndexPath:indexPath animated:YES];
সুতরাং এটি নির্বাচিত রাষ্ট্রটিকে ফ্ল্যাশ করবে এবং প্রত্যাবর্তন করবে।
cellForRowAtIndexPath
এই কোডটি লিখতে আমি এটি ব্যবহার করি :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UITableViewDelegate
প্রোটোকল থেকে আপনি পদ্ধতিটি ব্যবহার করতে পারেন willSelectRowAtIndexPath
এবং return nil
যদি না চান সারিটি নির্বাচন করা।
একই পদ্ধতিতে আপনি willDeselectRowAtIndexPath
পদ্ধতিটি ব্যবহার করতে পারেন এবং return nil
আপনি যদি না চান সারিটি নির্বাচিত করতে চান।
1- আপনাকে যা করতে হবে তা হ'ল হয় নির্বাচনের স্টাইলটিUITableViewCell
ব্যবহার করে হয়:
উদ্দেশ্য গ:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
অথবা
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
সুইফট 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
সুইফট 3:
cell.selectionStyle = .none
2 - বাস্তবায়ন করবেন না - tableView:didSelectRowAtIndexPath:
আপনার টেবিল ভিউতে delegate
বা আপনি যদি প্রয়োগ করেন তবে আপনার কোনও পদক্ষেপ নিতে চান এমন কক্ষগুলি স্পষ্টভাবে বাদ দিন।
3 - আরও, আপনি স্টোরিবোর্ড থেকে এটিও করতে পারেন। টেবিল ভিউ সেলের অধীনে টেবিল ভিউ সেল এবং বৈশিষ্ট্য পরিদর্শকতে ক্লিক করুন, সিলেকশনের পাশের ড্রপ ডাউনটি কোনওটিতে পরিবর্তন করুন।
4 - আপনি (আইওএস) এক্সকোড 9, সুইফট 4.0 এ কোডটি ব্যবহার করে টেবিল সেল হাইলাইটটি অক্ষম করতে পারেন
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "OpenTbCell") as! OpenTbCell
cell.selectionStyle = .none
return cell
}
স্নিপেটের নীচে হাইলাইটিং অক্ষম করুন তবে এটি কলটিও অক্ষম করে didSelectRowAtIndexPath
। আপনি যদি বাস্তবায়ন না করে থাকেন didSelectRowAtIndexPath
তবে নীচের পদ্ধতিটি ব্যবহার করুন। আপনি টেবিল তৈরি করার সময় এটি যুক্ত করা উচিত। এটি বোতাম এবং UITextField
কোষের অভ্যন্তরে যদিও কাজ করবে ।
self.tableView.allowsSelection = NO;
স্নিপেটের নীচে হাইলাইটিং অক্ষম করুন এবং এটি কলটি অক্ষম করে না didSelectRowAtIndexPath
। কক্ষে নির্বাচন করার শৈলীর মধ্যে নেই তে সেট করুনcellForRowAtIndexPath
cell.selectionStyle = UITableViewCellSelectionStyleNone;
স্নিপেটের নীচে কক্ষের সমস্ত কিছু অক্ষম করুন। এই করতে মিথষ্ক্রিয়া নিষ্ক্রিয় করা হবে buttons
, textfields
:
self.tableView.userInteractionEnabled = false;
নীচে Swift
উপরের Objective-C
সমাধানগুলির সমতুল্য :
প্রথম সমাধানের প্রতিস্থাপন
self.tableView.allowsSelection = false
দ্বিতীয় সমাধানের প্রতিস্থাপন
cell?.selectionStyle = UITableViewCellSelectionStyle.None
তৃতীয় সমাধানের প্রতিস্থাপন
self.tableView.userInteractionEnabled = false
টাইপ করার চেষ্টা করুন:
cell.selected = NO;
এটি যখন প্রয়োজন হবে তখন আপনার সারিটি অনির্বাচিত করবে।
সুইফট 3 এ ...
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let r = indexPath.row
print("clicked .. \(r)")
tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}
আমি সম্পত্তির UITableViewCell
ব্যবহারের উপর নিষেধাজ্ঞার নিয়ন্ত্রণ রাখার সাথে আমি এটিকে বেশ মজাদারভাবেও লড়াই করছি userInteractionEnabled
। আমার কাছে সেটিংগুলির জন্য 3 টি সেল স্ট্যাটিক টেবিল, তারিখ সহ 2, অন / অফ স্যুইচ সহ 1 টি রয়েছে। স্টোরিবোর্ড / আইবিতে খেলার পরে আমি নীচের অংশটিকে একটি অ-বাছাইযোগ্য করতে সক্ষম হয়েছি, তবে আপনি যখন এটিকে ট্যাপ করেন তখন শীর্ষ সারির একটি থেকে অদৃশ্য হয়ে যায়। এখানে আমার সেটিংস ইউআইটিএবলভিউয়ের একটি ডাব্লুআইপি চিত্র রয়েছে:
আপনি যদি তৃতীয় সারির ট্যাপ করেন তবে কিছুই ঘটে না, নির্বাচন দ্বিতীয় সারিতে থাকবে। কার্যকারিতা কার্যত অ্যাপলের ক্যালেন্ডার অ্যাপ্লিকেশনটির যোগ ইভেন্ট ইভেন্ট নির্বাচনের স্ক্রিনের অনুলিপি।
কোডটি আশ্চর্যজনকভাবে সামঞ্জস্যপূর্ণ, সমস্তভাবেই আইওএস 2 = / এর নিচে compatible
- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 2) {
return nil;
}
return indexPath;
}
এটি কারওর মধ্যে বাছাইয়ের স্টাইলটি সেট করার সাথে কাজ করে, তাই সেল টাচ ডাউন ইভেন্টগুলিতে ঝাঁকুনি দেয় না
আপনাকে কেবল এই কোডটি সেলফোরআউটিইন্টেক্সপথে রাখতে হবে
কক্ষের নির্বাচনের বৈশিষ্ট্যটি অক্ষম করতে: (ঘরটি ট্যাপ করার সময়)।
cell.selectionStyle = UITableViewCellSelectionStyle.None
আমি এটি ব্যবহার করছি, যা আমার পক্ষে কাজ করে।
cell?.selectionStyle = UITableViewCellSelectionStyle.None
যদিও এটি সেরা এবং সবচেয়ে সহজ সমাধান নির্বাচনের সময় হাইলাইটটি প্রদর্শন থেকে বাধা দেওয়ার জন্য
cell.selectionStyle = UITableViewCellSelectionStyleNone;
আমি এটিও পরামর্শ দিতে চাই যে এটি সারিটি নির্বাচিত হয়েছে এবং তারপরে এটি বন্ধ করে দেওয়া হয়েছে তা সংক্ষেপে দেখাতে মাঝে মাঝে দরকারী occasion এটি ব্যবহারকারীরা কী নির্বাচন করবেন তা নিশ্চিতকরণের সাথে সতর্ক করে:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
আপনি যেভাবে UITableViewCellSelectionStyleNone
/ ব্যবহার করতে না চান সে ক্ষেত্রে একই প্রভাব অর্জন করতে আপনি ব্যাকগ্রাউন্ডের রঙ সাফ করতে সেট করতে পারেন UITableViewCellSelectionStyleNone
।
আপনি নিম্নলিখিতগুলির মতো কোড ব্যবহার করবেন:
UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];
এটি প্রতিটি ঘরে আপনার অতিরিক্ত রঙিন দর্শন যোগ করার কারণে আপনার পারফরম্যান্সকে হ্রাস করতে পারে ।
তুমি ব্যবহার করতে পার :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
আপনার ইউআইটিএবলভিউয়ের সূচক পাথ পদ্ধতিতে সারিটির জন্য ঘরে।
এছাড়াও আপনি ব্যবহার করতে পারেন:
[tableView deselectRowAtIndexPath:indexPath animated:NO];
সারণীদর্শনটিতে didselectroatindexpath পদ্ধতি।
cell.selectionStyle = UITableViewCellSelectionStyle.none
সুইফ্ট 3-এ রয়েছে
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
[cell setSelected:NO animated:NO];
[cell setHighlighted:NO animated:NO];
শুভ কোডিং !!!
selection
এবং অবশ্যইhighlighting
এটি দিয়ে অক্ষম হয়ে যায়। অনেক বেশি ভোট দেওয়া উত্তরগুলি ব্যাখ্যা করে যে কীভাবেdisable selection
অক্ষম করা যায় এবং কীভাবে তা চিহ্নিত করা যায় নাhighlighting
। ব্যবহারের হাইলাইট শুধুমাত্র অক্ষম করতেcell.selectionStyle = .None
বা ফিরে যেতেstoryboard / cell / Selection = None