উত্তর:
টেবিল সেলের selectionStyle
সম্পত্তি এতে সেট করুন UITableViewCellSelectionStyleNone
। এটি এটিকে হাইলাইট করা থেকে রোধ করা উচিত এবং আপনি নিজের সম্পত্তিটিও এটি পরীক্ষা করতে পারেন tableView:didSelectRowAtIndexPath:
।
সম্পূর্ণরূপে নির্বাচন প্রতিরোধ করতে UITableViewCell
, আপনার UITableViewDelegate
প্রয়োগ করুন tableView:willSelectRowAtIndexPath:
। আপনি nil
যদি সারিটি নির্বাচন না করতে চান তবে সেই পদ্ধতি থেকে আপনি ফিরে আসতে পারেন।
- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
// Determine if row is selectable based on the NSIndexPath.
if (rowIsSelectable) {
return path;
}
return nil;
}
এটি সারিটি নির্বাচন করা এবং tableView:didSelectRowAtIndexPath:
ডাকা থেকে বাধা দেয় । তবে নোট করুন, এটি সারিটি হাইলাইট হতে বাধা দেয় না ।
আপনি যদি সারিটি স্পর্শে চাক্ষুষভাবে হাইলাইট হওয়া থেকে বিরত রাখতে চান তবে আপনি নিশ্চিত করতে পারেন যে ঘরের selectionStyle
সেটটি সেট করা আছে UITableViewCellSelectionStyleNone
, বা পছন্দনীয়ভাবে আপনি নিজের UITableViewDelegate
প্রয়োগটি নীচের tableView:shouldHighlightRowAtIndexPath:
মতো করে নিতে পারেন:
- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
// Determine if row is selectable based on the NSIndexPath.
return rowIsSelectable;
}
didSelectRowAtIndexPath
কারণ willSelectRowAtIndexPath
সর্বদা যাইহোক বলা হবে।
এটা ব্যবহার কর:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
didSelectRowAtIndexPath
এখনও বলা হয়।
শুধুমাত্র আইওএস 6+ এর জন্য।
আপনি tableView:shouldHighlightRowAtIndexPath:
আপনার প্রতিনিধিতে পদ্ধতিটি প্রয়োগ করতে পারেন
। এখানে আরও পড়ুন: http://developer.apple.com/library/ios/#docamentation/uikit/references/UITableViewDelegate_Protocol/References/References.html
এই সমস্যাটিও ইতিমধ্যে উল্লিখিত সমস্ত কিছু চেষ্টা করে দেখে। একটি চূড়ান্ত কৌশল, যা একটি টেবিল ঘর নির্বাচন করার সময় "ব্লু ফ্ল্যাশ" থেকে মুক্তি পেয়েছিল এই লাইনটি যুক্ত করছে:
self.myTableView.allowsSelection = NO;
এটি এক লাইন বা সবকিছু মিলিত কিনা তা নিশ্চিত নয় তবে মোট গ্র্যান্ড ফলাফল হিসাবে আমি আর নীল নির্বাচন বা এমনকি নীল ফ্ল্যাশ পাচ্ছি না। খুশি!
সেট cell.userInteractionEnabled = NO;
অ্যাপল বলেছে যে doSelectRowAtIndexPath এ আপনাকে প্রথমে করণীয় তা হল সারিটি অনির্বাচিত করা to
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
তারপরে আপনি অ্যাকসেসরি টাইপকে চেকমার্ক বা অন্য কোনও হিসাবে রূপান্তর করতে পারবেন না তাই আপনি যখন ডিফল্টআলেটেক্সেক্সপথটি প্রবেশ করান তখন আপনি সারিটি অনির্বাচন করতে পারেন, এবং যদি এটি নির্বাচিত হওয়ার অর্থ নয়, কেবল সেই সারিটি পরীক্ষা করবেন না।
আর একটি উপায় হল একটি দম্পতি বিভাগের পদ্ধতিতে যুক্ত করা UITableViewCell
। আমি এটি সেবাস্তিয়ানদের চেয়ে ভাল উত্তর (ভালও) কারণ আমি যেভাবে আমার টেবিলটি তৈরি করছি। আমি ভেবেছিলাম এটি অন্য কারও পক্ষে সহায়ক হতে পারে।
- (void)setSelectable:(BOOL)enabled {
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self setUserInteractionEnabled:enabled];
}
- (BOOL)isSelectable {
BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
[self isUserInteractionEnabled];
return ! disabled;
}
সুইফট ৪:
আপনি ইউআইটিএবলভিউ ডেলিগেট ব্যবহার করে নির্বাচন এবং হাইলাইটিং রোধ করতে পারবেন: হাইডলাইট রও
এই উত্তরটি ধরে নিয়েছে যে আপনি একটি কাস্টম সেল নামক একটি কাস্টম সেল তৈরি করেছেন: কাস্টম টেবিলভিউসেল
এবং আপনি সেই কাস্টম সেলটির ভিতরে একটি বুলিয়ান তৈরি করেছেন: isSelectable
func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
if cell.isSelectable == false {
return false
} else {
return true
}
}
এটি সেবাস্তিয়ান সেলিসের অবজেক্ট উত্তরের সুইফট সংস্করণ।
আপনি যদি নিজের ঘরটি ইন্টারফেস বিল্ডারে ডিজাইন করে থাকেন তবে এর জন্য ' ব্যবহারকারীর ইন্টারঅ্যাকশন সক্ষম ' থেকে চেকবক্সটি সরিয়ে আপনি এটি করতে পারেন tableViewCell
।
নির্বাচনটি নীল হিসাবে উপস্থিত হওয়া এড়ানোর আরও একটি সহজ উপায় রয়েছে।
আপনি নীল হিসাবে উপস্থিত হতে চান না এমন একটি ঘর নির্বাচন করুন।
তারপরে অ্যাট্রিবিউটস ইন্সপেক্টরটি নির্বাচন করুন (পাশের বৈশিষ্ট্যগুলির দৃশ্যে রুলার আইকনের পাশে ঝাল আইকন))
তারপরে 'নির্বাচন' ক্ষেত্রটি 'নীল' থেকে 'কিছুই নয়' তে পরিবর্তন করুন।
দ্রষ্টব্য, সম্ভবত এটি এখনও নির্বাচন করছে, আপনি যদি চান সমস্তটি ইউআই প্রভাব এড়াতে চান তবে এটি নির্বাচিত হিসাবে প্রদর্শিত হবে না।
টেবিল ভিউ: উইলডিসপ্লেকেল: ফরআউট ইন্ডেক্সপথ: টেবিলের পরিবর্তে ব্যবহার করুন: ডায়ালেক্টরোঅ্যাট ইন্ডেক্সপথ: ফ্ল্যাশ থেকে পরিত্রাণ পেতে প্রথমবার যখন আপনি ঘরের সাথে স্পর্শ করেন তখন প্রদর্শিত হবে।
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
নির্দিষ্ট সারিটি অনির্বাচিত করার জন্য আপনাকে ইউআইটিএবলভিউ প্রতিনিধির দুটি পদ্ধতিতে কিছু পরিবর্তন করতে হবে।
নীচে পদ্ধতিতে
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
ঘর বরাদ্দের পরে, নীচের কোডটি লিখুন
if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;
উপরের কোডটি সেলটি হাইলাইট করা রোধ করবে, যদি কোনওভাবে ব্যবহারকারী নির্বাচনের চেষ্টা করে।
নীচে এই প্রতিনিধি পদ্ধতিতে
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(indexPath.row == someCellNumber) return;
//for other cells write the code below...
}
আপনি যদি if(indexPath.row == someCellNumber) return;
সারিটি না লিখেন তবে নির্বাচিত হবে এবং অ্যাপ ক্র্যাশ হওয়ার সম্ভাবনা রয়েছে
tableView:shouldHighlightRowAtIndexPath:
যেমন নিচের আয়ুস দ্বারা লক্ষনীয়