মুছে ফেলতে সোয়াইপ করুন এবং "আরও" বোতামটি (আইওএস 7-তে মেল অ্যাপ্লিকেশানের মতো)


246

যখন ব্যবহারকারী টেবিল ভিউতে কোনও সেল সোয়াইপ করেন তখন "আরও" বোতামটি কীভাবে তৈরি করবেন (আইওএস 7 তে মেল অ্যাপ্লিকেশন)

আমি এখানে এবং কোকো টাচ ফোরামে উভয়ই এই তথ্যের সন্ধান করছিলাম, তবে আমি উত্তরটি খুঁজে পাচ্ছি না এবং আমি আশা করছি যে আমার চেয়ে বুদ্ধিমান কেউ আমাকে সমাধান দিতে পারে।

আমি চাই যে যখন ব্যবহারকারী একাধিক সম্পাদনা বোতাম প্রদর্শন করতে কোনও টেবিল ভিউ সেলটি সোয়াইপ করে (তিনি ডিফল্ট মুছুন বোতামটি)। আইওএস 7 এর মেল অ্যাপে আপনি মুছতে সোয়াইপ করতে পারেন, তবে একটি "আরও" বোতাম আছে যা দেখায়।

এখানে চিত্র বর্ণনা লিখুন



"মুছুন" বোতাম যুক্ত করতে আমি নিম্নলিখিত দুটি ফাংশনটি প্রয়োগ করি। - (BOOL) টেবিল ভিউ: (ইউআইটিএবলভিউ *) টেবিলভিউ CanEditRowAtIndexPath: (NSIndexPath *) সূচিপথ; - (অকার্যকর) টেবিলভিউ: (ইউআইটিএবলভিউ *) টেবিলভিউ কমিটএডিটিংস্টাইল: (ইউআইটিএবলভিউসেলএডিটিংস্টাইল) রডআউট ইন্ডেক্সপথ: (এনএসআইন্ডেক্সপথ *) ইনডেক্সপথ; এবং এর পাশে "আরও" বোতামটি যুক্ত করতে চাই।
গাই কাহলন

3
@ মনীশবাংসাল বনসাল এই থ্রেডের মতো দেখে মনে হচ্ছে ( অ্যাপল বিকাশকারী ফোরামে devforums.apple.com/message/860459#860459 ) এগিয়ে গিয়ে তাদের নিজস্ব বাস্তবায়ন তৈরি করেছে। আপনি এমন একটি প্রকল্প খুঁজে পেতে পারেন যা আপনি গিটহাবটিতে
গাই

8
@ গুয়াহা কাহলনম্যাট্রিক্স সমাধানটির জন্য এটি একটি কবজির মতো কাজ করে বলে ধন্যবাদ। এই প্রশ্নটি অনেকগুলি গুগল অনুসন্ধানে প্রথম নং ফলাফল এবং লোকেরা মন্তব্যগুলি ব্যবহার করে তাদের জ্ঞানের আদান-প্রদান করতে বাধ্য হয় কারণ কিছু লোক সিদ্ধান্ত নিয়েছে যে প্রশ্নটি বন্ধ করতে এবং এর পরিবর্তে গণতন্ত্র প্রচার করতে আরও সহায়ক। এই জায়গাটি পরিষ্কারভাবে আরও ভাল মোড প্রয়োজন।
akafak Gezer

2
আপনি যদি আইওএস 8 টার্গেট করতে পারেন তবে নীচের আমার উত্তরটি আপনি চান তা হবে।
জনি

উত্তর:


126

কীভাবে প্রয়োগ করবেন

দেখে মনে হচ্ছে আইওএস 8 এই এপিআইটি খুলবে। বিটা 2 এ এই জাতীয় কার্যকারিতার ইঙ্গিত উপস্থিত রয়েছে।

কিছু কাজ করার জন্য, কাঙ্ক্ষিত প্রভাব পেতে আপনার ইউআইটিএবলভিউর প্রতিনিধিতে নিম্নলিখিত দুটি পদ্ধতি বাস্তবায়ন করুন (উদাহরণের জন্য টুকরো দেখুন)।

- tableView:editActionsForRowAtIndexPath:
- tableView:commitEditingStyle:forRowAtIndexPath:


জ্ঞাত সমস্যা

ডকুমেন্টেশনটি টেবিল ভিউ: কমিটএডিটিংস্টাইল: ফরআউট ইন্ডেক্সপথ হ'ল:

"ইউআইটিএবলভিউআরঅ্যাকশন ব্যবহার করে সম্পাদনা ক্রিয়াকলাপের জন্য ডাকা হয়নি - পরিবর্তে অ্যাকশনের হ্যান্ডলারটি আহ্বান করা হবে।"

যাইহোক, সোয়াইপিং এটি ছাড়া কাজ করে না। এমনকি যদি পদ্ধতিটির স্টাবটি ফাঁকা হয় তবে এখনও এটি প্রয়োজন। এটি সম্ভবত বিটা 2-তে একটি বাগ।


সোর্স

https://twitter.com/markands/status/481642991745265664 https://gist.github.com/markands/76558707f583dbb8f870

আসল উত্তর: https://stackoverflow.com/a/24540538/870028


হালনাগাদ:

এই কাজের সাথে নমুনা কোড (সুইফটে): http://DPbox.com/s/0fvxosft2mq2v5m/DeleteRowExampleSwift.zip

স্যাম্পল কোডটিতে মাস্টারভিউকন্ট্রোলআরসুইফ্টে এই অনুসরণযোগ্য অনুসরণ পদ্ধতি রয়েছে এবং কেবল এই পদ্ধতির সাহায্যে আপনি ওপি স্ক্রিনশটে প্রদর্শিত আচরণটি পাবেন:

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {

    var moreRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "More", handler:{action, indexpath in
        println("MORE•ACTION");
    });
    moreRowAction.backgroundColor = UIColor(red: 0.298, green: 0.851, blue: 0.3922, alpha: 1.0);

    var deleteRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete", handler:{action, indexpath in
        println("DELETE•ACTION");
    });

    return [deleteRowAction, moreRowAction];
}

1
এটি সঠিক বলে মনে হচ্ছে, তবে এক্সকোড 6 জিএম-এ সোয়াইপ অঙ্গভঙ্গিটি কাজ করছে বলে মনে হচ্ছে না। সম্পাদনা মোডে টেবিল ভিউটি রেখেই সম্পাদনাগুলি অ্যাক্সেস করা যায়। অন্য কেউ দেখতে পাচ্ছেন যে সোয়াইপ কাজ করছে না?
সিগফুল্ট

@ সিগফৌল্ট আপনি কি টেবিলটি বাস্তবায়নের চেষ্টা করেছেন (খালি রেখে দিলেও) টেবিল ভিউ: কমিটএডিটিংস্টাইল: ফরআউটআইডেক্সপথ:?
জনি

আমি অবজেক্টিভ সি তে কাজ করছি না .. একই কোড আমি লিখেছি। কিছু ইঙ্গিত পরামর্শ দয়া করে।
সলিড নরম

@ সলিডসফট আপনার কাছে কি এমন উদাহরণ রয়েছে যা আমি দেখতে পারি? আমি সম্ভবত আরও ভালভাবে সাহায্য করতে সক্ষম হতে পারি।
জনি 22

3
আমার নিজের মন্তব্যের উত্তর দিতে। আপনি কল করুন tableView.editing = false( NOঅবজেক্টে) এবং ঘরটি "বন্ধ" হবে।
বেন লাচম্যান 21

121

আমি সুইপযোগ্য বাটনগুলি প্রয়োগ করতে একটি নতুন গ্রন্থাগার তৈরি করেছি যা আইওএস 8 মেল অ্যাপ্লিকেশানের মতো বিভিন্ন ট্রানজিশন এবং প্রসারণযোগ্য বোতামগুলিকে সমর্থন করে।

https://github.com/MortimerGoro/MGSwipeTableCell

এই লাইব্রেরিটি ইউআইটিএবলভিউসেল তৈরির বিভিন্ন উপায়ে এবং আইওএস 5, আইওএস 6, আইওএস 7 এবং আইওএস 8 এর পরীক্ষিতগুলির সাথে সামঞ্জস্যপূর্ণ।

এখানে কিছু সংক্রমণের নমুনা রয়েছে:

সীমান্ত স্থানান্তর:

সীমান্ত স্থানান্তর

ক্লিপ ট্রানজিশন

ক্লিপ ট্রানজিশন

3 ডি ট্রানজিশন:

এখানে চিত্র বর্ণনা লিখুন


1
মহান কাজ! অ্যানিমেশনগুলি কাস্টমাইজ করার জন্য কলব্যাকগুলি পাওয়া দুর্দান্ত হবে।
প্যাকু

1
নিবন্ধন করুন ভাল লাগছে। আমি আমার অ্যান্ড্রয়েড প্রকল্পের একটিতে অনুরূপ প্রভাব প্রয়োগ করার চেষ্টা করছি। দয়া করে বলুন আমি কীভাবে এন্ড্রয়েড এ অর্জন করতে পারি?
নীতেশ কুমার

আইওএস 8 + আইপ্যাডে, আমি কেবল সোয়াইপ পাচ্ছি না।
বৃশ্চিককিঙ্কিং 2 কে 5

এটি একটি আশ্চর্যজনক গ্রন্থাগার এবং যা খুব ভাল তা হ'ল এটির এখনও সমর্থন রয়েছে।
বিভক্ত

@ মর্তিমারগোরো, আমি "এমজিস্পাইপেটবেল" এল কাঠামো দিয়ে চেষ্টা করেছি তবে সমস্যাটি যখন আমি আমার টেবিলটি পুনরায় লোড করি তখন সোয়াইপ বোতামটি লুকানো থাকে। এই সমস্যাটির জন্য প্রায় কোনও কাজ
গণেশ গুতুরি

71

জনির উত্তরটি সঠিকভাবে উত্তর দেওয়া উচিত। এটি কেবল নতুনদের কাছে পরিষ্কার করার জন্য এটি কেবল উদ্দেশ্য-সিতে যুক্ত করছি (এবং আমাদের মধ্যে যারা সুইফট বাক্য গঠন শিখতে অস্বীকার করছেন :)

নিশ্চিত হয়ে নিন যে আপনি ইউটিভ্যালিভিউ ডেডেলিগেট ঘোষণা করেছেন এবং নিম্নলিখিত পদ্ধতিগুলি রয়েছে:

 -(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
 UITableViewRowAction *button = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 1" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
    {
        NSLog(@"Action to perform with Button 1");
    }];
    button.backgroundColor = [UIColor greenColor]; //arbitrary color
    UITableViewRowAction *button2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 2" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
                                    {
                                        NSLog(@"Action to perform with Button2!");
                                    }];
    button2.backgroundColor = [UIColor blueColor]; //arbitrary color

    return @[button, button2]; //array with all the buttons you want. 1,2,3, etc...
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
// you need to implement this method too or nothing will work:

}
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES; //tableview must be editable or nothing will work...
    }

1
গুরুত্বপূর্ণ canEditRowAtIndexPath উল্লেখ করতে
Heckscheibe

আমি যদি ঘরটি সোয়াইপ করার পরে টেবিলটি পুনরায় লোড করি, তবে সেই সোয়াইপ বোতামগুলি দৃশ্যমান বা লুকানো আছে?
গণেশ গুতুরি

25

এটি (বরং হাস্যকরভাবে) একটি ব্যক্তিগত API।

নিম্নলিখিত দুটি পদ্ধতি ব্যক্তিগত এবং ইউআইটিবেবল ভিউয়ের প্রতিনিধিকে প্রেরণ করা হয়েছে:

-(NSString *)tableView:(UITableView *)tableView titleForSwipeAccessoryButtonForRowAtIndexPath:(NSIndexPath *)indexPath;
-(void)tableView:(UITableView *)tableView swipeAccessoryButtonPushedForRowAtIndexPath:(NSIndexPath *)indexPath;

তারা বেশ স্ব ব্যাখ্যাযোগ্য।


4
অ্যাপল আইওএস 8 দিয়ে এই বৈশিষ্ট্যটি খুলছে। নীচে জনির উত্তর দেখুন।
সিগফল্ট

24

জোনির উত্তরের উন্নতি করতে, এখন নিম্নলিখিত হিসাবে পাবলিক এপিআই ব্যবহার করে এটি করা যেতে পারে:

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {

    let moreRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.default, title: "More", handler:{action, indexpath in
        print("MORE•ACTION");
    });
    moreRowAction.backgroundColor = UIColor(red: 0.298, green: 0.851, blue: 0.3922, alpha: 1.0);

    let deleteRowAction = UITableViewRowAction(style: UITableViewRowActionStyle.default, title: "Delete", handler:{action, indexpath in
        print("DELETE•ACTION");
    });

    return [deleteRowAction, moreRowAction];
}

17

আমি আশা করি আপনি আপেল আপনাকে অপেক্ষা করা ঠিক না হওয়া পর্যন্ত অপেক্ষা করতে পারবেন না? সুতরাং এখানে আমার বিকল্প।

একটি কাস্টম সেল তৈরি করুন। এতে দুটি ইউভিউ রয়েছে

1. upper
2. lower

নীচের দৃশ্যে আপনার যা যা বোতাম দরকার তা যুক্ত করুন। অন্যান্য আইবিএএকের মতোই এর ক্রিয়াগুলিও ডিল করুন। আপনি অ্যানিমেশন সময়, শৈলী এবং যে কোনও কিছু স্থির করতে পারেন।

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

আশা করি যে সাহায্য।


7

এটি স্ট্যান্ডার্ড এসডিকে ব্যবহার করে সম্ভব নয়। তবে বিভিন্ন তৃতীয় পক্ষের সমাধান রয়েছে যা মেল.এ্যাপে আচরণটি কমবেশি অনুকরণ করে। তাদের মধ্যে কিছু (উদাহরণস্বরূপ এমসিএসওয়াইপটিবেল ভিউসেল , ড্যাকনটেক্সটমেনু টেবিলভিউ কনট্রোলার , আরএমএসওয়াইপট্যাবল ভিউচেল ) কিছুটি (যেমন SWTableViewCell ) স্ট্যান্ডার্ডের নীচে দ্বিতীয় ইউআইএসক্রোলভিউ UITableViewCellScrollViewরাখে UITableViewCellএবং তাদের কিছু পরিবর্তন করে UITableViewCellScrollView

টাচ হ্যান্ডলিংটি সবচেয়ে স্বাভাবিক অনুভূত হওয়ায় আমি সর্বশেষ পন্থাটি পছন্দ করি। বিশেষত, এমএসসিমোরঅপশনটিবলভিউসেল ভাল। আপনার পছন্দ আপনার নির্দিষ্ট প্রয়োজনীয়তার উপর নির্ভর করে (আপনার আইওএস 6 সামঞ্জস্যতা প্রয়োজন কিনা, এছাড়াও আপনার বাম থেকে ডান প্যান প্রয়োজন কিনা) এর উপর নির্ভর করে পৃথক হতে পারে। এছাড়াও সচেতন থাকুন যে এগুলির মধ্যে বেশিরভাগ পদ্ধতির বোঝা নিয়ে আসে: অ্যাপল UITableViewCellসাবউভিউ হায়ারার্কিতে পরিবর্তন আনলে তারা সহজেই ভবিষ্যতের আইওএস সংস্করণে ভাঙ্গতে পারে ।


7

কোনও লাইব্রেরি ব্যবহার না করে সুইফট 3 সংস্করণ কোড:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        tableView.tableFooterView = UIView(frame: CGRect.zero) //Hiding blank cells.
        tableView.separatorInset = UIEdgeInsets.zero
        tableView.dataSource = self
        tableView.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return 4
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath)

        return cell
    }

    //Enable cell editing methods.
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {

        return true
    }

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    }

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

        let more = UITableViewRowAction(style: .normal, title: "More") { action, index in
            //self.isEditing = false
            print("more button tapped")
        }
        more.backgroundColor = UIColor.lightGray

        let favorite = UITableViewRowAction(style: .normal, title: "Favorite") { action, index in
            //self.isEditing = false
            print("favorite button tapped")
        }
        favorite.backgroundColor = UIColor.orange

        let share = UITableViewRowAction(style: .normal, title: "Share") { action, index in
            //self.isEditing = false
            print("share button tapped")
        }
        share.backgroundColor = UIColor.blue

        return [share, favorite, more]
    }

}

6

আপনাকে সাবক্লাস UITableViewCellএবং সাবক্লাস পদ্ধতিটি করতে হবে willTransitionToState:(UITableViewCellStateMask)stateযা যখনই ব্যবহারকারী সেলটি সোয়াইপ করে called stateমুছে ফেলা বোতামটি প্রদর্শিত হচ্ছে কিনা এবং পতাকাগুলি সেখানে আপনার আরও বোতামটি দেখিয়ে / আড়াল করে The

দুর্ভাগ্যক্রমে এই পদ্ধতিটি আপনাকে মুছুন বোতামটির প্রস্থ বা এনিমেশন সময় দেয় না। সুতরাং আপনাকে আপনার কোডের মধ্যে আপনার আরও বোতামের ফ্রেম এবং অ্যানিমেশনের সময় পর্যবেক্ষক এবং হার্ড-কোড করা দরকার (আমি ব্যক্তিগতভাবে মনে করি অ্যাপলকে এ সম্পর্কে কিছু করা দরকার)।


7
"আমি ব্যক্তিগতভাবে মনে করি অ্যাপলকে এ সম্পর্কে কিছু করা দরকার"। আমি রাজী. আপনি কি ইতিমধ্যে তাদের একটি বাগ রিপোর্ট / বৈশিষ্ট্য অনুরোধ লিখেছেন?
তাফকদাসোহ

4

সুইফ্ট প্রোগ্রামিংয়ের জন্য

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
  if editingStyle == UITableViewCellEditingStyle.Delete {
    deleteModelAt(indexPath.row)
    self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
  }
  else if editingStyle == UITableViewCellEditingStyle.Insert {
    println("insert editing action")
  }
}

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
  var archiveAction = UITableViewRowAction(style: .Default, title: "Archive",handler: { (action: UITableViewRowAction!, indexPath: NSIndexPath!) in
        // maybe show an action sheet with more options
        self.tableView.setEditing(false, animated: false)
      }
  )
  archiveAction.backgroundColor = UIColor.lightGrayColor()

  var deleteAction = UITableViewRowAction(style: .Normal, title: "Delete",
      handler: { (action: UITableViewRowAction!, indexPath: NSIndexPath!) in
        self.deleteModelAt(indexPath.row)
        self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic);
      }
  );
  deleteAction.backgroundColor = UIColor.redColor()

  return [deleteAction, archiveAction]
}

func deleteModelAt(index: Int) {
  //... delete logic for model
}

@ বিবিসি আপনি সম্পাদনার পরামর্শ দিতে স্বাগত। দীর্ঘ সময়ে
সুইফ্ট

3

এই আপনাকে সাহায্য করতে পারে।

-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
 UITableViewRowAction *button = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 1" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
    {
        NSLog(@"Action to perform with Button 1");
    }];
    button.backgroundColor = [UIColor greenColor]; //arbitrary color
    UITableViewRowAction *button2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Button 2" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
                                    {
                                        NSLog(@"Action to perform with Button2!");
                                    }];
    button2.backgroundColor = [UIColor blueColor]; //arbitrary color

    return @[button, button2]; //array with all the buttons you want. 1,2,3, etc...
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
// you need to implement this method too or nothing will work:

}
 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return YES; //tableview must be editable or nothing will work...
    }

3

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

আপনাকে এতে টেবিলভিউয়ের বয়লারপয়েন্ট পদ্ধতিটি পরিবর্তন করতে হবে:

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]?  {
    // 1   
    var shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Share" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
    // 2
    let shareMenu = UIAlertController(title: nil, message: "Share using", preferredStyle: .ActionSheet)

    let twitterAction = UIAlertAction(title: "Twitter", style: UIAlertActionStyle.Default, handler: nil)
    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)

    shareMenu.addAction(twitterAction)
    shareMenu.addAction(cancelAction)


    self.presentViewController(shareMenu, animated: true, completion: nil)
    })
    // 3
    var rateAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Rate" , handler: { (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in
    // 4
    let rateMenu = UIAlertController(title: nil, message: "Rate this App", preferredStyle: .ActionSheet)

    let appRateAction = UIAlertAction(title: "Rate", style: UIAlertActionStyle.Default, handler: nil)
    let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)

    rateMenu.addAction(appRateAction)
    rateMenu.addAction(cancelAction)


    self.presentViewController(rateMenu, animated: true, completion: nil)
    })
    // 5
    return [shareAction,rateAction]
  }

আপনি এই সম্পর্কে আরো বিস্তারিত জানতে পারেন এই সাইট । অ্যাপলের নিজস্ব ডকুমেন্টেশন ব্যাকগ্রাউন্ডের রঙ পরিবর্তনের জন্য সত্যই দরকারী:

ক্রিয়া বোতামটির পটভূমি রঙ।

ঘোষণা OBJECTIVE-C @ প্রপার্টি (ননোটমিক, অনুলিপি) ইউআইক্লোর * ব্যাকগ্রাউন্ড কালার আলোচনা আপনার বোতামের পটভূমির রঙ নির্দিষ্ট করতে এই সম্পত্তিটি ব্যবহার করুন। আপনি যদি এই সম্পত্তিটির জন্য কোনও মান নির্দিষ্ট না করেন তবে ইউআইকিট শৈলীর বৈশিষ্ট্যের মানের ভিত্তিতে একটি ডিফল্ট রঙ বরাদ্দ করে।

আইওএস 8.0 এবং তারপরে উপলভ্যতা উপলব্ধ।

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

উদ্দেশ্য গ:

+ (void)setupDeleteRowActionStyleForUserCell {

    UIFont *font = [UIFont fontWithName:@"AvenirNext-Regular" size:19];

    NSDictionary *attributes = @{NSFontAttributeName: font,
                      NSForegroundColorAttributeName: [UIColor whiteColor]};

    NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString: @"DELETE"
                                                                          attributes: attributes];

    /*
     * We include UIView in the containment hierarchy because there is another button in UserCell that is a direct descendant of UserCell that we don't want this to affect.
     */
    [[UIButton appearanceWhenContainedIn:[UIView class], [UserCell class], nil] setAttributedTitle: attributedTitle
                                                                                          forState: UIControlStateNormal];
}

সুইফট:

    //create your attributes however you want to
    let attributes = [NSFontAttributeName: UIFont.systemFontOfSize(UIFont.systemFontSize())] as Dictionary!            

   //Add more view controller types in the []
    UIButton.appearanceWhenContainedInInstancesOfClasses([ViewController.self])

এটি সবচেয়ে সহজ এবং সর্বাধিক স্ট্রিমযুক্ত রেখাযুক্ত সংস্করণ আইএমএইচও। আশা করি এটা সাহায্য করবে.

আপডেট: এখানে সুইফট 3.0 সংস্করণ:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    var shareAction:UITableViewRowAction = UITableViewRowAction(style: .default, title: "Share", handler: {(action, cellIndexpath) -> Void in
        let shareMenu = UIAlertController(title: nil, message: "Share using", preferredStyle: .actionSheet)

        let twitterAction = UIAlertAction(title: "Twitter", style: .default, handler: nil)
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

        shareMenu.addAction(twitterAction)
        shareMenu.addAction(cancelAction)


        self.present(shareMenu,animated: true, completion: nil)
    })

    var rateAction:UITableViewRowAction = UITableViewRowAction(style: .default, title: "Rate" , handler: {(action, cellIndexpath) -> Void in
        // 4
        let rateMenu = UIAlertController(title: nil, message: "Rate this App", preferredStyle: .actionSheet)

        let appRateAction = UIAlertAction(title: "Rate", style: .default, handler: nil)
        let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)

        rateMenu.addAction(appRateAction)
        rateMenu.addAction(cancelAction)


        self.present(rateMenu, animated: true, completion: nil)
    })
    // 5
    return [shareAction,rateAction]
}

1
আপনার উত্তরের জন্য ধন্যবাদ, আমি নিশ্চিত এটি অনেক বিকাশকারীকে সাহায্য করবে। হ্যাঁ, আপনি ঠিক বলেছেন, অ্যাপল আইওএস 8 থেকে এই সমাধান সরবরাহ করে But তবে দুর্ভাগ্যক্রমে এই নেটিভ সমাধানটি সম্পূর্ণ কার্যকারিতা সরবরাহ করে না। উদাহরণস্বরূপ, অ্যাপলের মেল অ্যাপ্লিকেশনটিতে আপনার কাছে দুটি পক্ষের বোতাম রয়েছে (বাম দিক থেকে একটি বোতাম এবং ডান দিক থেকে তিনটি) অ্যাপল থেকে বর্তমান এপিআই আপনি উভয় পক্ষের বোতাম যুক্ত করতে পারবেন না এবং বর্তমান এপিআই সমর্থন করে না ডিফল্ট ক্রিয়া যখন ব্যবহারকারী প্রতিটি দিকে দীর্ঘ সোয়াইপ করে। এখন আইএমএইচওর জন্য সর্বোত্তম সমাধান হ'ল ওপেন সোর্স এমজিস্পাইপটেবলসেল।
গাই কাহলন

@ গুয়াহাহলন হ্যাঁ, আপনি বাম এবং ডান সোয়াইপ ইস্যুতে একেবারে ঠিক আছেন, এবং আমি সম্মত হলাম যে আরও কাস্টমাইজেশনের জন্য, এমজিস্পাইপটিবেল সেরা সেরা। অ্যাপলের নিজস্ব সবচেয়ে পরিশীলিত বিকল্প নয়, তবে আমি সাধারণ কাজের জন্য এটি সবচেয়ে সোজা এগিয়ে পেয়েছি।
সেপ্টেম্বর

@ সেপট্রনিক আপনি কি দয়া করে আপনার কোডটি সুইফট 3 এ আপডেট করতে পারবেন? shareMenu.একটি addActionপদ্ধতি গ্রহণ করে না । ধন্যবাদ
বাইবেস

@ বিবিসি আমি সুইফট সংস্করণ যুক্ত করেছি। বৈশিষ্ট্যটির জন্যও কি আপনার কিছুটা দরকার? শেয়ারমেনু হ'ল একটি ইউআইএলার্টকন্ট্রোলার, সুতরাং এটি পদক্ষেপ নেওয়া উচিত। এটি ব্যবহার করে দেখুন এবং আমাকে যদি কোন ভাগ্য :)
Septronic

3

আসল সুইফ্ট 3 উত্তর

এটি আপনার প্রয়োজন কেবলমাত্র ফাংশন। কাস্টম ক্রিয়াকলাপগুলির জন্য আপনার ক্যানডিট বা কমিয়েডিং স্টাইল ফাংশনগুলির প্রয়োজন নেই।

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let action1 = UITableViewRowAction(style: .default, title: "Action1", handler: {
        (action, indexPath) in
        print("Action1")
    })
    action1.backgroundColor = UIColor.lightGray
    let action2 = UITableViewRowAction(style: .default, title: "Action2", handler: {
        (action, indexPath) in
        print("Action2")
    })
    return [action1, action2]
}

3

আইওএস 11 এর হিসাবে এটি সর্বজনীনভাবে উপলভ্য UITableViewDelegate। এখানে কিছু নমুনা কোড রয়েছে:

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath {
    UIContextualAction *delete = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive
                                                                         title:@"DELETE"
                                                                       handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
                                                                           NSLog(@"index path of delete: %@", indexPath);
                                                                           completionHandler(YES);
                                                                       }];

    UIContextualAction *rename = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal
                                                                         title:@"RENAME"
                                                                       handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
                                                                           NSLog(@"index path of rename: %@", indexPath);
                                                                           completionHandler(YES);
                                                                       }];

    UISwipeActionsConfiguration *swipeActionConfig = [UISwipeActionsConfiguration configurationWithActions:@[rename, delete]];
    swipeActionConfig.performsFirstActionWithFullSwipe = NO;

    return swipeActionConfig;
}

এটাও আছে:

- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath;

দস্তাবেজ: https://developer.apple.com/docamentation/uikit/uitableviewdelegate/2902367-tableview?language=objc


3

সুইফট 4 এবং আইওএস 11+

@available(iOS 11.0, *)
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    let delete = UIContextualAction(style: .destructive, title: "Delete") { _, _, handler in

        handler(true)
        // handle deletion here
    }

    let more = UIContextualAction(style: .normal, title: "More") { _, _, handler in

        handler(true)
        // handle more here
    }

    return UISwipeActionsConfiguration(actions: [delete, more])
}

2

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

এখানে চিত্র বর্ণনা লিখুন

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let Approve = UITableViewRowAction(style: .normal, title: "Approve") { action, index in

            self.ApproveFunc(indexPath: indexPath)
        }
        Approve.backgroundColor = .green

        let Reject = UITableViewRowAction(style: .normal, title: "Reject") { action, index in

            self.rejectFunc(indexPath: indexPath)
        }
        Reject.backgroundColor = .red



        return [Reject, Approve]
    }

    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    func ApproveFunc(indexPath: IndexPath) {
        print(indexPath.row)
    }
    func rejectFunc(indexPath: IndexPath) {
        print(indexPath.row)
    }

আপনি কি আপনার উত্তরের এমন কিছু ব্যাখ্যা যুক্ত করতে পারেন যাতে পাঠক এটি থেকে শিক্ষা নিতে পারেন?
নিকো হাজেস

এই কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু সীমিত, তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান তা দেখিয়ে তার দীর্ঘমেয়াদী মানকে ব্যাপকভাবে উন্নত করবে এবং ভবিষ্যতে পাঠকদের আরও অন্যান্য অনুরূপ প্রশ্নের সাথে আরও দরকারী করে তুলবে। আপনার অনুমানগুলি সহ কিছু ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
টিম ডেকম্যান

1

এটি করার কিছুটা ভঙ্গুর উপায় এখানে ব্যক্তিগত API গুলি জড়িত বা আপনার নিজস্ব সিস্টেম নির্মাণে জড়িত না। আপনি আপনার বেট হেজেড করছেন যে অ্যাপল এটি ভঙ্গ করে না এবং আশা করি তারা এমন একটি এপিআই প্রকাশ করবে যা আপনি এই কয়েকটি লাইন কোডের সাথে প্রতিস্থাপন করতে পারবেন।

  1. কেভিও স্ব-কনটেন্টভিউ.সুপারভিউ.লেয়ার.সুব্লেয়ার। ইনিশ এ এটি করুন। এটি ইউআইএসক্রোলভিউয়ের স্তর। আপনি কেভিও 'সাবভিউ' দেখতে পারবেন না।
  2. সাবভিউগুলি পরিবর্তিত হলে, স্ক্রোলভিউ.সুবভিউগুলির মধ্যে মুছুন নিশ্চিতকরণ দর্শনটি সন্ধান করুন। এটি পর্যবেক্ষণ কলব্যাকে করা হয়।
  3. এই দর্শনটির আকার দ্বিগুণ করুন এবং এর একমাত্র সাবউভিউয়ের বামদিকে একটি ইউআইবাটন যুক্ত করুন। এটি পর্যবেক্ষণ কলব্যাকেও করা হয়। মুছুন নিশ্চিতকরণ ভিউয়ের একমাত্র সাবভিউটি মুছুন বোতাম।
  4. (alচ্ছিক) UIButton ইভেন্টটি UITableView না পাওয়া অবধি সেলফ সার্ভিউ দেখা উচিত এবং তারপরে আপনি যে ডেটা উত্স বা ডেলিগেট পদ্ধতিটি তৈরি করেন, যেমন টেবিলভিউ: কমিটকাস্টম এডিটিংস্টাইল: forRAAtIndexPath :. আপনি [টেবিলভিউ সূচকপথফোরকেল: স্ব] ব্যবহার করে ঘরের ইনডেক্সপথটি খুঁজে পেতে পারেন।

এটির জন্যও আপনি স্ট্যান্ডার্ড টেবিল ভিউ সম্পাদনা প্রতিনিধি কলব্যাকগুলি বাস্তবায়ন করতে হবে।

static char kObserveContext = 0;

@implementation KZTableViewCell {
    UIScrollView *_contentScrollView;
    UIView *_confirmationView;
    UIButton *_editButton;
    UIButton *_deleteButton;
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        _contentScrollView = (id)self.contentView.superview;

        [_contentScrollView.layer addObserver:self
             forKeyPath:@"sublayers"
                options:0
                context:&kObserveContext];

        _editButton = [UIButton new];
        _editButton.backgroundColor = [UIColor lightGrayColor];
        [_editButton setTitle:@"Edit" forState:UIControlStateNormal];
        [_editButton addTarget:self
                        action:@selector(_editTap)
              forControlEvents:UIControlEventTouchUpInside];

    }
    return self;
}

-(void)dealloc {
    [_contentScrollView.layer removeObserver:self forKeyPath:@"sublayers" context:&kObserveContext];
}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if(context != &kObserveContext) {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
        return;
    }
    if(object == _contentScrollView.layer) {
        for(UIView * view in _contentScrollView.subviews) {
            if([NSStringFromClass(view.class) hasSuffix:@"ConfirmationView"]) {
                _confirmationView = view;
                _deleteButton = [view.subviews objectAtIndex:0];
                CGRect frame = _confirmationView.frame;
                CGRect frame2 = frame;
                frame.origin.x -= frame.size.width;
                frame.size.width *= 2;
                _confirmationView.frame = frame;

                frame2.origin = CGPointZero;
                _editButton.frame = frame2;
                frame2.origin.x += frame2.size.width;
                _deleteButton.frame = frame2;
                [_confirmationView addSubview:_editButton];
                break;
            }
        }
        return;
    }
}

-(void)_editTap {
    UITableView *tv = (id)self.superview;
    while(tv && ![tv isKindOfClass:[UITableView class]]) {
        tv = (id)tv.superview;
    }
    id<UITableViewDelegate> delegate = tv.delegate;
    if([delegate respondsToSelector:@selector(tableView:editTappedForRowWithIndexPath:)]) {
        NSIndexPath *ip = [tv indexPathForCell:self];
        // define this in your own protocol
        [delegate tableView:tv editTappedForRowWithIndexPath:ip];
    }
}
@end

আপনি যদি নমুনা কোড সরবরাহ করতে পারেন তবে আমি সত্যিই খুশি, ধন্যবাদ
গাই কাহলন

সম্পন্ন. এটিতে একটি বা দু'টি বাগ থাকতে পারে তবে আপনি সারাংশ পাবেন।
অষ্টভর

1

একটি আশ্চর্যজনক গ্রন্থাগার বলা হয় SwipeCellKit , এটি আরও স্বীকৃতি অর্জন করা উচিত। আমার মতে এটি তুলনায় শীতল MGSwipeTableCell। পরবর্তীকালে মেল অ্যাপ্লিকেশনগুলির কোষগুলির আচরণের সম্পূর্ণরূপে প্রতিলিপি করা যায় SwipeCellKitনা। একবার দেখুন


আমি চেষ্টা করে দেখেছি SwipeCellKitএবং মুগ্ধ হয়েছি ... যতক্ষণ না আমি এই ব্যতিক্রমগুলির মধ্যে একটি পেয়েছি কারণ একটি টেবিল ভিউ আপডেটের আগে সারিগুলির সংখ্যা আপডেটের পরে +/- সারিগুলির পরিবর্তনের মতো নয়। কথাটি হ'ল, আমি কখনই আমার ডেটা সেট পরিবর্তন করি নি। সুতরাং যদি এটি উদ্বেগজনক না হয় তবে আমি কী জানি না। সুতরাং আমি এটি ব্যবহারের বিরুদ্ধে সিদ্ধান্ত নিয়েছি এবং কেবলমাত্র নতুন ইউআইটিএবলভিউডেলিগেট পদ্ধতি ব্যবহার করেছি। আপনার যদি আরও কাস্টমাইজেশন প্রয়োজন হয় তবে আপনি সর্বদা ওভাররাইড করতে পারেনwillBeginEditingRowAt: ....
horseshoe7

@ horseshoe7 এটি অদ্ভুত। সোয়াইপসেলকিট ব্যবহার করার সময় আমি কখনই কোনও ব্যাতিক্রম করতে পারি নি। সর্বোপরি কোনও কোষের কী ধরণের সম্পর্ক থাকতে পারে এমন একটি ব্যতিক্রম যা ডেটাসোর্স পরিবর্তনের কারণে ঘটে?
আন্দ্রে চেরুনুখ

1

সুইফট 4

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let delete = UIContextualAction(style: .destructive, title: "Delete") { (action, sourceView, completionHandler) in
        print("index path of delete: \(indexPath)")
        completionHandler(true)
    }
    let rename = UIContextualAction(style: .normal, title: "Edit") { (action, sourceView, completionHandler) in
        print("index path of edit: \(indexPath)")
        completionHandler(true)
    }
    let swipeActionConfig = UISwipeActionsConfiguration(actions: [rename, delete])
    swipeActionConfig.performsFirstActionWithFullSwipe = false
    return swipeActionConfig
}

আপনার কোডগুলিতে সোর্স ভিউ কী? এটা কি আইকন বা চিত্র?
সাইদ রহমাতলাহী

1
সাSদ রাহমাতোলাহী @ sourceViewহ'ল "দৃশ্যটি যেখানে ক্রিয়াটি প্রদর্শিত হয়েছিল"। আরও তথ্যের জন্য, "UIContextualAction.Handler" অনুসন্ধান করুন।
মার্ক Moeykens

0

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

BaseTableViewCell.h

#import <UIKit/UIKit.h>

@interface BaseTableViewCell : UITableViewCell

@property(nonatomic,strong)UIView* customView;

-(void)showCustomView;

-(void)hideCustomView;

@end

BaseTableViewCell.M

#import "BaseTableViewCell.h"

@interface BaseTableViewCell()
{
    BOOL _isCustomViewVisible;
}

@end

@implementation BaseTableViewCell

- (void)awakeFromNib {
    // Initialization code
}

-(void)prepareForReuse
{
    self.customView = nil;
    _isCustomViewVisible = NO;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

-(void)showCustomView
{
    if(nil != self.customView)
    {
        if(!_isCustomViewVisible)
        {
            _isCustomViewVisible = YES;

            if(!self.customView.superview)
            {
                CGRect frame = self.customView.frame;
                frame.origin.x = self.contentView.frame.size.width;
                self.customView.frame = frame;
                [self.customView willMoveToSuperview:self.contentView];
                [self.contentView addSubview:self.customView];
                [self.customView didMoveToSuperview];
            }

            __weak BaseTableViewCell* blockSelf = self;
            [UIView animateWithDuration:.5 animations:^(){

                for(UIView* view in blockSelf.contentView.subviews)
                {
                    CGRect frame = view.frame;
                    frame.origin.x = frame.origin.x - blockSelf.customView.frame.size.width;
                    view.frame = frame;
                }
            }];
        }
    }
}

-(void)hideCustomView
{
    if(nil != self.customView)
    {
        if(_isCustomViewVisible)
        {
            __weak BaseTableViewCell* blockSelf = self;
            _isCustomViewVisible = NO;
            [UIView animateWithDuration:.5 animations:^(){
                for(UIView* view in blockSelf.contentView.subviews)
                {
                    CGRect frame = view.frame;
                    frame.origin.x = frame.origin.x + blockSelf.customView.frame.size.width;
                    view.frame = frame;
                }
            }];
        }
    }
}

@end

এই কার্যকারিতাটি পেতে, বেস টেবিলভিউসেল থেকে আপনার টেবিলের ভিউ সেলটি প্রসারিত করুন।

এরপরে, ইউআইভিউউকন্ট্রোলারের ভিতরে, যা ইউআইটিএবলভিউডেলিগেট প্রয়োগ করে, বাম এবং ডান সোয়াইপগুলি পরিচালনা করতে দুটি অঙ্গভঙ্গি সনাক্তকারী তৈরি করে create

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self.tableView registerNib:[UINib nibWithNibName:CUSTOM_CELL_NIB_NAME bundle:nil] forCellReuseIdentifier:CUSTOM_CELL_ID];

    UISwipeGestureRecognizer* leftSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleLeftSwipe:)];
    leftSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
    [self.tableView addGestureRecognizer:leftSwipeRecognizer];

    UISwipeGestureRecognizer* rightSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightSwipe:)];
    rightSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
    [self.tableView addGestureRecognizer:rightSwipeRecognizer];
}

দুটি সোয়াইপ হ্যান্ডলার যুক্ত করার চেয়ে বেশি

- (void)handleLeftSwipe:(UISwipeGestureRecognizer*)recognizer
{
    CGPoint point = [recognizer locationInView:self.tableView];
    NSIndexPath* index = [self.tableView indexPathForRowAtPoint:point];

    UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:index];

    if([cell respondsToSelector:@selector(showCustomView)])
    {
        [cell performSelector:@selector(showCustomView)];
    }
}

- (void)handleRightSwipe:(UISwipeGestureRecognizer*)recognizer
{
    CGPoint point = [recognizer locationInView:self.tableView];
    NSIndexPath* index = [self.tableView indexPathForRowAtPoint:point];

    UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:index];

    if([cell respondsToSelector:@selector(hideCustomView)])
    {
        [cell performSelector:@selector(hideCustomView)];
    }
}

এখন, ইউআইটিএবলভিউডেলিগেটের সেলফোর্ডআউটইন্ডেক্সপথের অভ্যন্তরে, আপনি কাস্টম ইউআইভিউ তৈরি করতে পারেন এবং এটিকে সনাক্ত করা কক্ষের সাথে সংযুক্ত করতে পারেন।

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CustomCellTableViewCell* cell = (CustomCellTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"CustomCellTableViewCell" forIndexPath:indexPath];

    NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"CellCustomView"
                                                      owner:nil
                                                    options:nil];

    CellCustomView* customView = (CellCustomView*)[ nibViews objectAtIndex: 0];

    cell.customView = customView;

    return cell;
}

অবশ্যই, কাস্টম ইউআইভিউউড লোড করার এই উপায়টি কেবল এই উদাহরণের জন্য। আপনি যেমন চান এটি পরিচালনা করুন।

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