ইউআইটিএবলভিউ কিছু ঘরকে "অপছন্দযোগ্য" হিসাবে সেট করা হচ্ছে


109

আমি কীভাবে ইউআইটিএবলভিউর ঘরের সম্পত্তিটিকে নির্বাণযোগ্য হতে সেট করতে পারি? যখন ব্যবহারকারী ঘরে ঘরে টোকা দেয় তখন আমি সেই নীল নির্বাচন বাক্সটি দেখতে চাই না।


4
উল্লেখ্য সাম্প্রতিক Googlers: পথ আইওএস 6 এর হিসাবে এই কাজ করতে ও বৃহত্তর হয় tableView:shouldHighlightRowAtIndexPath:যেমন নিচের আয়ুস দ্বারা লক্ষনীয়
jemmons

উত্তর:


151

টেবিল সেলের selectionStyleসম্পত্তি এতে সেট করুন UITableViewCellSelectionStyleNone। এটি এটিকে হাইলাইট করা থেকে রোধ করা উচিত এবং আপনি নিজের সম্পত্তিটিও এটি পরীক্ষা করতে পারেন tableView:didSelectRowAtIndexPath:


3
কেন্ডাল ঠিক বলেছেন। ডায়সিলিটরোঅ্যাট ইন্ডেক্সপথকে প্রথম স্থানে ডাকা থেকে বাঁচাতে সেবাস্তিয়ান সেলিসের উত্তর অনুসরণ করুন। হাইলাইটিং প্রতিরোধের জন্য আপনার পছন্দসই স্টাইলও সেট করা উচিত।
ড্যানিয়েল ডিকিসন

হ্যাঁ, আমি মনে করি সেবাস্তিয়ান সেলিসের উত্তরটি সঠিক উত্তর হবে, ড্যানিয়েলকে ধন্যবাদ
LolaRun

1
স্ট্যাটিক বোর্ড ফ্যানরা স্ট্যাটিক টেবিলভিউ ব্যবহার করে একটি ইউআইটিএবলভিউসেল নির্বাচন করতে পারে এবং বৈশিষ্ট্যগুলির অধীনে পরিদর্শক নির্বাচন ক্ষেত্রটি খুঁজে পেতে পারেন এবং এটিকে কোনওটিতে সেট করতে পারবেন না
ম্যানুয়েল বিএম

197

সারি নির্বাচন প্রতিরোধ করতে

সম্পূর্ণরূপে নির্বাচন প্রতিরোধ করতে 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;
}

1
ধন্যবাদ! ঠিক আমার যা প্রয়োজন ছিল।
বুচান্নান

10
এটি আমার মতে গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি প্রকৃতপক্ষে সমস্যাটি মাস্ক করার পরিবর্তে সমাধান করে।
Tovi7

4
নোট করুন যে টেবিলভিউ: উইলসিলেকরোএটিআইডেক্সপথ: সেলটি হাইলাইট করার পরে ডাকা হয়, যা একটি ঝাঁকুনি তৈরি করে। অ্যাপলের বিবরণ থেকে: ব্যবহারকারীরা একটি সারি স্পর্শ না করে এবং তারপরে আঙুল তোলা পর্যন্ত এই পদ্ধতিটি বলা হয় না; ততক্ষণ সারিটি নির্বাচিত হয়নি, যদিও এটি টাচ-ডাউন-এ হাইলাইট করা হয়েছে।
ড্যানিয়েল

5
আমি @ সিম্পলবোলো এর সাথে একমত এই সমাধানটি ব্যবহার করার জন্য, আপনাকে সেল-সিলেকশন স্টাইলটি নির্বাচন করা যায় না এমন সারিগুলিতে UITableViewCellSelectionStyleNone এ সেট করতে হবে। অন্যথায় এটি কৃপণ মনে হচ্ছে।
কাইল Clegg

তারপরে সর্বোত্তম উত্তরটি এখনও গ্রহণযোগ্য উত্তর। আপনি কেবল তেমন কিছু না করতে বেছে নিতে পারেন didSelectRowAtIndexPathকারণ willSelectRowAtIndexPathসর্বদা যাইহোক বলা হবে।
ম্যাথু কুইরোস

16

এটা ব্যবহার কর:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

5
এটি কেবল নির্বাচনের রঙ প্রদর্শন করা থেকে বিরত রাখে, didSelectRowAtIndexPathএখনও বলা হয়।
জেকেল

এটি ড্যানিয়েল ডিকিসনের এই প্রশ্নের ঠিক একই উত্তর।

সুইফট ২.২ আপডেট - সেল.স্লেশনটিস্টাইল = ইউআইটিএবলভিউসেল সিলেকশনস্টাইল.নিউন
আপ্লিয়ারডেন.কম

11

শুধুমাত্র আইওএস 6+ এর জন্য।

আপনি tableView:shouldHighlightRowAtIndexPath:আপনার প্রতিনিধিতে পদ্ধতিটি প্রয়োগ করতে পারেন । এখানে আরও পড়ুন: http://developer.apple.com/library/ios/#docamentation/uikit/references/UITableViewDelegate_Protocol/References/References.html


3
আরও অনেক বেশি ভোট হওয়া উচিত। এটি সঠিক উত্তর, নির্বাচন শৈলীর পরিবর্তনের ফলে আপনি কোনও সেল নির্বাচিত দেখতে পাচ্ছেন না, ব্যবহারকারীর সক্রিয়করণটি অক্ষম করছেন যাতে আপনি কোনও ঘরে ট্যাপ করতে পারবেন না বা নির্বাচনের ক্ষেত্রে সেলগুলি নির্বাচন না করা হ্যাক ha
স্টুয়ার্ট ক্যাম্পবেল

9

এই সমস্যাটিও ইতিমধ্যে উল্লিখিত সমস্ত কিছু চেষ্টা করে দেখে। একটি চূড়ান্ত কৌশল, যা একটি টেবিল ঘর নির্বাচন করার সময় "ব্লু ফ্ল্যাশ" থেকে মুক্তি পেয়েছিল এই লাইনটি যুক্ত করছে:

self.myTableView.allowsSelection = NO;

এটি এক লাইন বা সবকিছু মিলিত কিনা তা নিশ্চিত নয় তবে মোট গ্র্যান্ড ফলাফল হিসাবে আমি আর নীল নির্বাচন বা এমনকি নীল ফ্ল্যাশ পাচ্ছি না। খুশি!


1
এটির সাথে সমস্যা হ'ল এটি এটিকে এমন করে তোলে যাতে টেবিলভিউয়ের সমস্ত কক্ষ নির্বাচনযোগ্য নয়। আপনি যদি চান যে কোনও কক্ষটি নির্বাচনযোগ্য এবং অন্যরা নির্বাচনযোগ্য না হয়, এটি এটি করবে না। সেবাস্তিয়ানের দৃষ্টিভঙ্গি আমার পক্ষে কাজ করেছিল।
টেরি

সত্য, অনুমতিগুলি নির্বাচন = কোনও কোষের জন্য নির্বাচন অক্ষম করবে না।
জেএম

1
এই সম্পত্তিটির জন্য ইন্টারফেস বিল্ডারে সমমানের সম্পত্তি আছে কি?
ক্রিশ

8

সেট cell.userInteractionEnabled = NO;


দাঁড়াও, এমন কর প্রকার, রকম. 'মিথ্যা' লোয়ার কেস তৈরি করুন এবং সেই ক্রেজি সেমিকোলনটি হারাবেন। এটি আপনার জন্য এটি দ্রুততর করবে। 'মিথ্যা' মন্দ এবং ভুল ছিল, এখন 'না' মন্দ এবং ভুল। পরের সপ্তাহ পর্যন্ত যখন 'মিথ্যা' মন্দ এবং অন্যায় হয় তখন সেভাবে করুন।
হালর


3

অ্যাপল বলেছে যে doSelectRowAtIndexPath এ আপনাকে প্রথমে করণীয় তা হল সারিটি অনির্বাচিত করা to

[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];

তারপরে আপনি অ্যাকসেসরি টাইপকে চেকমার্ক বা অন্য কোনও হিসাবে রূপান্তর করতে পারবেন না তাই আপনি যখন ডিফল্টআলেটেক্সেক্সপথটি প্রবেশ করান তখন আপনি সারিটি অনির্বাচন করতে পারেন, এবং যদি এটি নির্বাচিত হওয়ার অর্থ নয়, কেবল সেই সারিটি পরীক্ষা করবেন না।

টেবিল ভিউ প্রোগ্রামিং গাইড


1
সেক্ষেত্রে, যখন কোনও ব্যবহারকারী কক্ষের স্পর্শ করবে, এটি অল্প সময়ের জন্য হাইলাইট করা হবে এবং তারপরে অপ্রকাশিত হবে - তবে আমি বুঝতে পেরেছি, মূল বিষয়টি হাইলাইট করা থেকে পুরোপুরি বন্ধ করা উচিত।
কুবা সুদার

3

আর একটি উপায় হল একটি দম্পতি বিভাগের পদ্ধতিতে যুক্ত করা UITableViewCell। আমি এটি সেবাস্তিয়ানদের চেয়ে ভাল উত্তর (ভালও) কারণ আমি যেভাবে আমার টেবিলটি তৈরি করছি। আমি ভেবেছিলাম এটি অন্য কারও পক্ষে সহায়ক হতে পারে।

- (void)setSelectable:(BOOL)enabled {
    [self setSelectionStyle:UITableViewCellSelectionStyleNone];
    [self setUserInteractionEnabled:enabled];
}

- (BOOL)isSelectable {
    BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
                     [self isUserInteractionEnabled];
    return ! disabled;
}

3

সুইফট ৪:
আপনি ইউআইটিএবলভিউ ডেলিগেট ব্যবহার করে নির্বাচন এবং হাইলাইটিং রোধ করতে পারবেন: হাইডলাইট রও

এই উত্তরটি ধরে নিয়েছে যে আপনি একটি কাস্টম সেল নামক একটি কাস্টম সেল তৈরি করেছেন: কাস্টম টেবিলভিউসেল
এবং আপনি সেই কাস্টম সেলটির ভিতরে একটি বুলিয়ান তৈরি করেছেন: 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
    }
}

এটি সেবাস্তিয়ান সেলিসের অবজেক্ট উত্তরের সুইফট সংস্করণ।


1

আপনি যদি নিজের ঘরটি ইন্টারফেস বিল্ডারে ডিজাইন করে থাকেন তবে এর জন্য ' ব্যবহারকারীর ইন্টারঅ্যাকশন সক্ষম ' থেকে চেকবক্সটি সরিয়ে আপনি এটি করতে পারেন tableViewCell


0

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

আপনি নীল হিসাবে উপস্থিত হতে চান না এমন একটি ঘর নির্বাচন করুন।

তারপরে অ্যাট্রিবিউটস ইন্সপেক্টরটি নির্বাচন করুন (পাশের বৈশিষ্ট্যগুলির দৃশ্যে রুলার আইকনের পাশে ঝাল আইকন))

তারপরে 'নির্বাচন' ক্ষেত্রটি 'নীল' থেকে 'কিছুই নয়' তে পরিবর্তন করুন।

দ্রষ্টব্য, সম্ভবত এটি এখনও নির্বাচন করছে, আপনি যদি চান সমস্তটি ইউআই প্রভাব এড়াতে চান তবে এটি নির্বাচিত হিসাবে প্রদর্শিত হবে না।


0

টেবিল ভিউ: উইলডিসপ্লেকেল: ফরআউট ইন্ডেক্সপথ: টেবিলের পরিবর্তে ব্যবহার করুন: ডায়ালেক্টরোঅ্যাট ইন্ডেক্সপথ: ফ্ল্যাশ থেকে পরিত্রাণ পেতে প্রথমবার যখন আপনি ঘরের সাথে স্পর্শ করেন তখন প্রদর্শিত হবে।

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

0

নির্দিষ্ট সারিটি অনির্বাচিত করার জন্য আপনাকে ইউআইটিএবলভিউ প্রতিনিধির দুটি পদ্ধতিতে কিছু পরিবর্তন করতে হবে।

নীচে পদ্ধতিতে

- (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;সারিটি না লিখেন তবে নির্বাচিত হবে এবং অ্যাপ ক্র্যাশ হওয়ার সম্ভাবনা রয়েছে



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