ios - আমি কিভাবে UITableView নির্বাচনটি নিষ্ক্রিয় করতে পারি?




cocoa-touch (20)

উদ্দেশ্য গ:

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

    self.tableView.allowsSelection = NO;
  2. স্নিপেট নীচের হাইলাইট নিষ্ক্রিয় এবং এটি didSelectRowAtIndexPath করতে কল নিষ্ক্রিয় করে না। cellForRowAtIndexPath সেলের নির্বাচন শৈলী সেট করুন

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
  3. স্নিপেট নীচের কোষে সবকিছু নিষ্ক্রিয় করুন। এটি buttons , textfields মিথস্ক্রিয়া অক্ষম করবে:

    self.tableView.userInteractionEnabled = false;

সুইফট:

নীচে Objective-C সমাধানের উপরে Swift সমতুল্য:

  1. প্রথম সমাধান প্রতিস্থাপন

    self.tableView.allowsSelection = false
  2. দ্বিতীয় সমাধান প্রতিস্থাপন

    cell?.selectionStyle = UITableViewCellSelectionStyle.None
  3. তৃতীয় সমাধান প্রতিস্থাপন

    self.tableView.userInteractionEnabled = false

যখন আপনি একটি UITableView এ একটি সারি আলতো চাপুন, সারি হাইলাইট এবং নির্বাচিত হয়। এটি একটি সারি আলতো চাপ তাই এই নিষ্ক্রিয় করা সম্ভব না?


UItableviewcell হাইলাইটিং নিষ্ক্রিয় করতে

cell.selectionStyle = UITableViewCellSelectionStyleNone;

এবং ব্যবহারকারীর কোষের সাথে যোগাযোগ করার অনুমতি দেওয়া উচিত নয়।

cell.userInteractionEnabled = NO;

আপনাকে যা করতে হবে তা হল UITableViewCell ইনস্ট্যান্সে নির্বাচন শৈলীটি নির্বাচন করে either:

উদ্দেশ্য গ:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

অথবা

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

সুইফ্ট 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None

সুইফ্ট 3 এবং 4.x:

cell.selectionStyle = .none

উপরন্তু, নিশ্চিত করুন যে আপনি -tableView:didSelectRowAtIndexPath: বাস্তবায়ন না করেন -tableView:didSelectRowAtIndexPath: আপনার টেবিলের প্রতিনিধিদলে দেখুন বা আপনি যদি এটি প্রয়োগ না করেন তবে সেগুলি কোনও ক্রিয়া করতে চান না সেগুলি স্পষ্টভাবে বাদ দিন।

এখানে এবং here আরও তথ্য


আপনার UITableViewCell এর XIB এট্রিবিউট ইন্সপেক্টর Selection None সেট মান সেট করুন।


আপনি এই ব্যবহার করতে পারেন

cell.selectionStyle = UITableViewCellSelectionStyleNone;

আপনি কেবল এই কোডটিকে সেলফোরাআউটেইনডেক্সপথে রাখতে হবে

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

cell.selectionStyle = UITableViewCellSelectionStyle.None

আমরা কোড লিখতে পারেন

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

কিন্তু যখন আমরা লাইন উপরে কাস্টম সেল Xib আছে জন্য সতর্কবার্তা দিতে

কাস্টম সেল জিব

আমরা ইন্টারফেস বিল্ডার থেকে নির্বাচন শৈলী সেট করতে হবে


আমার জন্য, নিম্নলিখিত জরিমানা কাজ করেছেন:

tableView.allowsSelection = NO;

এই didSelectRowAt# মানে সহজভাবে কাজ করবে না। অর্থাৎ, টেবিলে একটি সারি স্পর্শ, যেমন, একেবারে কিছুই করতে হবে। (এবং সম্ভবত, সম্ভবত একটি নির্বাচিত-অ্যানিমেশন হবে না।)

(মনে রাখবেন, যদি কোষগুলিতে, আপনার কাছে UIButton বা অন্য কোনও নিয়ন্ত্রণ থাকে তবে অবশ্যই সেই নিয়ন্ত্রণগুলি কাজ করবে। টেবিল সেলটিতে আপনার যে কোনও নিয়ন্ত্রণগুলি ঘটবে, এটি UITableView এর সম্পূর্ণতার সাথে সম্পর্কিত নয় যা আপনাকে " " didSelectRowAt# ব্যবহার করে didSelectRowAt# ।)


আমি এই খুব profusely সঙ্গে যুদ্ধ করা হয়েছে, আমার UITableViewCell একটি নিয়ন্ত্রণ থাকার userInteractionEnabled সম্পত্তি ব্যবহারের নিষিদ্ধ। আমার সেটিংসের জন্য একটি 3 টি সেল স্ট্যাটিক টেবিল, তারিখগুলির সাথে 2, একটি অন / অফ সুইচ সহ 1। স্টোরিবোর্ড / আইবি সম্পর্কে খেলার পর আমি নীচে একটিকে নির্বাচনযোগ্য করতে পরিচালিত করেছি, কিন্তু যখন আপনি এটি ট্যাপ করেন তখন শীর্ষ সারির একটি থেকে নির্বাচন অদৃশ্য হয়ে যায়। এখানে আমার সেটিংস একটি WIP চিত্র UITableView:

যদি আপনি 3 য় সারিতে কিছুই না করেন তবে কিছুই হবে না, নির্বাচনটি দ্বিতীয় সারিতে থাকবে। কার্যকারিতা আসলে অ্যাপল এর ক্যালেন্ডার অ্যাপ্লিকেশন এর ইভেন্ট ইভেন্ট সময় নির্বাচন পর্দা একটি কপি।

কোড বিস্ময়করভাবে সামঞ্জস্যপূর্ণ, আইওএস 2 = নিচে সব উপায়:

- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 2) {
        return nil;
    }
    return indexPath;
}

এটি নির্বাচন শৈলীটি সেটিকে সংযোজন করার সাথে সাথে কাজ করে, তাই সেল স্পর্শ ইভেন্টগুলিতে ফ্লিকার না করে


আমি এই ব্যবহার করছি, যা আমার জন্য কাজ করে।

cell?.selectionStyle = UITableViewCellSelectionStyle.None

এটা চেষ্টা কর

cell.selectionStyle = UITableViewCellSelectionStyleNone;

এবং

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

এবং আপনি ইন্টারফেসbuilder ব্যবহার করে নির্বাচন শৈলী সেট করতে পারেন।


কারণ আমি সম্প্রতি এই পোস্টটি পড়েছি এবং এটি আমাকে সাহায্য করেছে, আমি উত্তরগুলির উত্তর (বংশবৃদ্ধির জন্য) জবাব দিতে অন্য একটি উত্তর পোস্ট করতে চেয়েছিলাম।


সুতরাং, আপনার পছন্দসই যুক্তি এবং / অথবা ফলাফলের উপর নির্ভর করে আসলে 5 টি ভিন্ন উত্তর রয়েছে:

1. কোনও অন্য ইন্টারঅ্যাকশন পরিবর্তন না করে নীল হাইলাইটিং অক্ষম করতে:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

আমি যখন এটি একটি UIButton - বা অন্য কিছু নিয়ন্ত্রণ (গুলি) - একটি UITableViewCell এ হোস্ট করা এবং আমি ব্যবহারকারীকে নিয়ন্ত্রণের সাথে যোগাযোগ করতে সক্ষম হতে চাই কিন্তু সেল নিজেই না।

দ্রষ্টব্য : টনি মিলিয়ন উপরে উল্লিখিত হিসাবে, এটি tableView:didSelectRowAtIndexPath: প্রতিরোধ করে না tableView:didSelectRowAtIndexPath: আমি সাধারন "if" বিবৃতিগুলি দ্বারা প্রায় এটি পেতে পারি, যা প্রায়শই বিভাগের জন্য পরীক্ষা করে এবং একটি নির্দিষ্ট বিভাগের জন্য পদক্ষেপ এড়ানো হয়।

আরেকটি উপায় আমি এই মত একটি সেল ট্যাগিং জন্য পরীক্ষা করার চিন্তা করা হয়:

- (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
    }
}



2. একটি সম্পূর্ণ টেবিলে এটি করার জন্য, আপনি টেবিলের প্রতিটি কক্ষে উপরের সমাধান প্রয়োগ করতে পারেন, তবে আপনি এটিও করতে পারেন:

[tableView setAllowsSelection:NO];

আমার পরীক্ষায়, এটি এখনও UITableViewCell ভিতরে নিয়ন্ত্রণগুলিকে ইন্টারেক্টিভ করার অনুমতি দেয়।


3. "কেবলমাত্র পঠনযোগ্য" একটি সেল তৈরি করতে, আপনি কেবল এটি করতে পারেন:

[cell setUserInteractionEnabled:NO];



4. একটি সম্পূর্ণ টেবিল "শুধুমাত্র-পড়া" করতে

[tableView setUserInteractionEnabled:NO];



5. কোনও সেল হাইলাইট করতে হবে কিনা তা নির্ধারণের জন্য (যা এই উত্তর অনুসারে নিখরচায় নির্বাচন অন্তর্ভুক্ত করে), আপনি নিম্নলিখিত UITableViewDelegate প্রোটোকল পদ্ধতি বাস্তবায়ন করতে পারেন:

- (BOOL)tableView:(UITableView *)tableView 
   shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath

তুমি ব্যবহার করতে পার ....

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

দ্রুত অনির্বাচন জন্য

cell.selectionStyle = .None

নির্বাচন চলাকালীন হাইলাইটটি দেখানোর থেকে সারি প্রতিরোধ করার জন্য এটি সর্বোত্তম এবং সহজ সমাধান

cell.selectionStyle = UITableViewCellSelectionStyleNone;

আমি এটাও বোঝাতে চাই যে এটি মাঝে মাঝে সামান্যভাবে দেখায় যে সারি নির্বাচিত হয়েছে এবং তারপরে এটি বন্ধ করে দেওয়া হয়েছে। এটি ব্যবহারকারীদের কী চয়ন করতে চান তার একটি নিশ্চিতকরণের সাথে সতর্ক করে:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}

যদি আপনি কেবল ফ্ল্যাশ নির্বাচন করতে চান তবে নির্বাচিত অবস্থায় থাকবেন না, আপনি কল করতে পারেন

didSelectRowAtIndexPath

অনুসরণ

[tableView deselectRowAtIndexPath:indexPath animated:YES];

তাই এটি নির্বাচিত রাষ্ট্র ফ্ল্যাশ এবং প্রত্যাবর্তন করা হবে।


Swift জন্য যে কেউ উত্তর প্রয়োজন হলে:

cell.selectionStyle = .None

UITableViewDelegate প্রোটোকল থেকে আপনি পদ্ধতিটি willSelectRowAtIndexPath করতে পারেন willSelectRowAtIndexPath এবং আপনি যদি সারিটি নির্বাচন না চান তবে return nil

একইভাবে আপনি willDeselectRowAtIndexPath পদ্ধতিটি ব্যবহার করতে পারেন এবং যদি আপনি সারিটি অনির্বাচিত করতে না চান তবে return nil


সুইফ্ট সমাধান w / কাস্টম সেল:

import Foundation

class CustomTableViewCell: UITableViewCell
{
  required init(coder aDecoder: NSCoder)
  {
    fatalError("init(coder:) has not been implemented")
  }

  override init(style: UITableViewCellStyle, reuseIdentifier: String?)
  {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.selectionStyle = UITableViewCellSelectionStyle.None
  } 
}

cell.selectionStyle = UITableViewCellSelectionStyleNone;




cocoa-touch