আইওএস 9-এ সোয়াইপ-সক্ষম টেবিল ভিউ সেল


83

আমি চাই আমার টেবিলের তালিকায় আইওএস 8 এর মতো একটি সোয়াইপ-সক্ষম মেনু থাকতে পারে (প্রথম আইওএস 7 এ প্রবর্তিত)।

টেবিল ভিউ সেল অ্যাকশন বোতামগুলির স্ক্রিনশট

আমি একটি রেন্ডারলিচ গাইড পেয়েছি যা এটি কীভাবে করবেন সে সম্পর্কে স্পষ্ট , তবে এটি এক বছর 4 মাস আগে লেখা হয়েছিল এবং কোডটি উদ্দেশ্য-সিতে রয়েছে।

আইওএস 8 বা আসন্ন আইওএস 9 অবশেষে অ্যাপলের এসডিকে এই ফাংশনটি অন্তর্ভুক্ত করেছে? আমি জানি তারা বহু বছর আগে অন্তর্নির্মিত "মুছে ফাংশনটি প্রকাশ করতে সোয়াইপ" করেছে। আইওএস 8 মেল ফাংশনটি নকল করতে প্যাচড-টুগেদার কোড প্রয়োগ করার ক্ষেত্রে আমি আমার সময় নষ্ট করতে চাই না, যদি অ্যাপলের নতুন আইওএস এটি একটি পরিষ্কারভাবে মোড়ানো প্যাকেজে আমার কাছে দেয়।



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

উত্তর:


159

এটা চেষ্টা কর. (সুইফট 3.0 এর জন্য আপডেট করা হয়েছে) ( বিকাশকারী ডক্স )

override func tableView(_ tableView: UITableView, editActionsForRowAt: IndexPath) -> [UITableViewRowAction]? {
    let more = UITableViewRowAction(style: .normal, title: "More") { action, index in
        print("more button tapped")
    }
    more.backgroundColor = .lightGray

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

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

    return [share, favorite, more]
}

এটিও বাস্তবায়ন করুন: (আপনি এটি শর্তযুক্ত করতে পারেন তবে এখানে সবকিছু সম্পাদনযোগ্য)

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

(পুরানো সংস্করণ)

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
        let more = UITableViewRowAction(style: .Normal, title: "More") { action, index in
            print("more button tapped")
        }
        more.backgroundColor = UIColor.lightGrayColor()

        let favorite = UITableViewRowAction(style: .Normal, title: "Favorite") { action, index in
            print("favorite button tapped")
        }
        favorite.backgroundColor = UIColor.orangeColor()

        let share = UITableViewRowAction(style: .Normal, title: "Share") { action, index in
            print("share button tapped")
        }
        share.backgroundColor = UIColor.blueColor()

        return [share, favorite, more]
    }

    func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        // the cells you would like the actions to appear needs to be editable
        return true
    }

11
এটি প্রশ্নের উত্তর দেয় না। আমরা সুইফট ব্যবহার করে বাম সোয়াইপ বের করার কোনও উপায় বের করার চেষ্টা করছি যা এটি করে না
সোমু

ধন্যবাদ! এটি সম্ভবত বাম-ডান সোয়াইপগুলি পরিচালনা করে না, তবে আমি সিদ্ধান্ত নিয়েছি যে কোনওভাবেই এই ফাংশনটি ত্যাগ করব। কেবল যেটি পরিষ্কার নয় তা হ'ল কীভাবে টেবিল থেকে ঘরটি সরিয়ে / মুছতে পারে এমন একটি বোতাম চাপানোর পরে টেবিলটি স্বয়ংক্রিয়ভাবে রিফ্রেশ হবে?
ডেভ জি

4
আপনি কী বোঝাতে চেয়েছেন tableview.reloadRowsAtIndexPaths ([indexpath] withRowAnimation: UITableViewRowAnimation.Automatic)এবং মুছে ফেলার জন্য তা জানেন নাtableview.deleteRowsAtIndexPaths([indexpath], withRowAnimation: UITableViewRowAnimation.Automatic)
jose920405

4
সেলটি সোয়াইপ করার পরিবর্তে এডিট অ্যাকশনটি খুলতে পারবেন?
হেইসেম কাতিবী

4
সুইফট 3 ফাংশন সংজ্ঞাoverride func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]?
ডেভিড কর্বিন

28

এই কোডটি আমার জন্য সুইফট 4-এ কাজ করে।

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

উপরের পর্দার উত্তর: -

 func tableView(_ tableView: UITableView,
                   trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
    {
        // Write action code for the trash
        let TrashAction = UIContextualAction(style: .normal, title:  "Trash", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
            print("Update action ...")
            success(true)
        })
        TrashAction.backgroundColor = .red

        // Write action code for the Flag
        let FlagAction = UIContextualAction(style: .normal, title:  "Flag", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
            print("Update action ...")
            success(true)
        })
        FlagAction.backgroundColor = .orange

        // Write action code for the More
        let MoreAction = UIContextualAction(style: .normal, title:  "More", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
            print("Update action ...")
            success(true)
        })
        MoreAction.backgroundColor = .gray


        return UISwipeActionsConfiguration(actions: [TrashAction,FlagAction,MoreAction])
    }

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

উপরের পর্দার উত্তর: -

 func tableView(_ tableView: UITableView,
                   leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
    {

        let closeAction = UIContextualAction(style: .normal, title:  "Mark as Read", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
            print("CloseAction ...")
            success(true)
        })
        closeAction.backgroundColor = .blue
        return UISwipeActionsConfiguration(actions: [closeAction])

    }

টেবিলভিউ ডেলিগেট পদ্ধতি একইভাবে লিখুন: -

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrPerson.count
    }

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

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        let personName = arrPerson[indexPath.row]
        cell.textLabel?.text = personName.personName
        return cell

    }

এবং ভিডডিডলয়েডে

override func viewDidLoad() {
    super.viewDidLoad()

    tblView.delegate = self
    tblView.dataSource = self

    let person1 = personData(personName: "Jonny", personAge: 30)
    let person2 = personData(personName: "Chandan", personAge: 20)
    let person3 = personData(personName: "Gopal", personAge: 28)

   arrPerson.append(person1)
   arrPerson.append(person2)
   arrPerson.append(person3)

}

7
মাত্র 3 বছর সময় নিয়েছে :) উত্তর দেওয়ার জন্য ধন্যবাদ
রন স্রেব্রো

4
এটি আইওএস 11+
সিডিব

21

এই ক্রিয়াগুলির জন্য জিজ্ঞাসা করতে আপনি একটি ইউআইটিএবলভিউ প্রতিনিধি পদ্ধতি ব্যবহার করতে পারেন। এই পদ্ধতিটি নিম্নরূপ প্রয়োগ করুন:

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath {
     UITableViewRowAction *modifyAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Modify" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {
         // Respond to the action.
     }];
     modifyAction.backgroundColor = [UIColor blueColor];
     return @[modifyAction];
}

আপনি অবশ্যই একাধিক ক্রিয়া ফিরে আসতে পারেন এবং পাঠ্য এবং পটভূমির রঙ কাস্টমাইজ করতে পারেন।

এই পদ্ধতিটি বাস্তবায়নের জন্য সারিটি সম্পাদনযোগ্য করে তোলাও প্রয়োজন:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
}

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

হ্যাঁ, আপনি কেবলমাত্র সেই কোড সহ সমস্ত কার্যকারিতা অর্জন করতে পারেন। এটি একটি অন্তর্নির্মিত বৈশিষ্ট্য। বাহ, এটি এমনকি সঠিক উত্তর এবং কেউ নীচে ভোট দিয়েছিল। আমি বিস্মিত.
বালেস্ট্রপাট্রিক

সাবধান থাকুন যে এটি iOS8 + থেকে উপলব্ধ এবং এটি কেবল আপনাকে বামদিকে সোয়াইপ করতে দেয়, ডানদিকে সোয়াইপ করার জন্য আপনাকে কাস্টম প্রয়োগ করতে হবে। তা ছাড়া, দ্রুত এবং সহজ উত্তর
জিরি ট্রেক

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

15

আমি এই লাইব্রেরিটি পেয়েছি MGSwipeTableCell স্যুইফ্ট ব্যবহার করে টেবিল ভিউতে একটি স্লাইড সেল বাস্তবায়নের জন্য অনেকগুলি অনুসন্ধানের পরে আমি প্রয়োগটি করতে এটির একটি এবং এর কোডের একটি মাত্র লাইন পেয়েছি এবং এটি অত্যন্ত দরকারী বলে খুঁজে পেয়েছি।

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
  {
    let reuseIdentifier = "programmaticCell"
    var cell = self.table.dequeueReusableCellWithIdentifier(reuseIdentifier) as! MGSwipeTableCell!
    if cell == nil
    {
      cell = MGSwipeTableCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: reuseIdentifier)
    }

    cell.textLabel!.text = "Title"
    cell.detailTextLabel!.text = "Detail text"
    cell.delegate = self //optional

    //configure left buttons
    cell.leftButtons = [MGSwipeButton(title: "", icon: UIImage(named:"check.png"), backgroundColor: UIColor.greenColor())
      ,MGSwipeButton(title: "", icon: UIImage(named:"fav.png"), backgroundColor: UIColor.blueColor())]
    cell.leftSwipeSettings.transition = MGSwipeTransition.Rotate3D

    //configure right buttons
    cell.rightButtons = [MGSwipeButton(title: "Delete", backgroundColor: UIColor.redColor())
      ,MGSwipeButton(title: "More",backgroundColor: UIColor.lightGrayColor())]
    cell.rightSwipeSettings.transition = MGSwipeTransition.Rotate3D

    return cell
  }

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


11

সুইফট 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]
    }

}

2

এএএআইএফকি সমাধানের জন্য কোনও অন্তর্নির্মিত প্রস্তুত নেই, এবং আইওএস 9 থাকলেও আপনি সম্ভবত এটি ব্যবহার করতে পারবেন না কারণ আপনি কেবলমাত্র অ্যাপসটিতে আইওএস 9 সমর্থন করতে পারবেন না ভবিষ্যতের জন্য।

পরিবর্তে, আমি আপনাকে এই লাইব্রেরিটি সন্ধান করার পরামর্শ দিচ্ছি:

https://github.com/CEWendel/SWTableViewCell

এটি খুব সহজেই কনফিগারযোগ্য, বেশ পালিশযুক্ত এবং আমি যে কোনও সুইফট প্রকল্পে কাজ করেছি তাতে ভাল কাজ করেছে।

আশা করি এটা সাহায্য করবে!


ধন্যবাদ বিকাশে নতুন এবং এর আগে কখনও গিটহাব ব্যবহার হয়নি। আমি সবেমাত্র জিপ ফাইলটি ডাউনলোড করে এক্স-কোডে প্রকল্পটি খুললাম এবং তারপরে প্রকল্পটি চালিয়েছি তবে "বিল্ড ব্যর্থ" পেয়েছি। কীভাবে এটি কাজ করে তা দেখার আগে আমার কি কোডটি আমার প্রকল্পের সাথে একীভূত করতে হবে?
ডেভ জি

নির্ভরতা পরিচালক হিসাবে কোকোপডগুলি ইনস্টল করার চেয়ে আপনি আরও ভাল; এটি শিল্পের মান এবং এটি আপনাকে প্রচুর মাথা ব্যাথা থেকে বাঁচায়। আরও কোকোপোড এবং এখানে কীভাবে
জিরি ট্রেকাক

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

কোকোপডগুলির সাহায্যে আপনি আইওএস 8 + ব্যবহার করছেন, পাশাপাশি আপনি লাইব্রেরি পাশাপাশি, উদ্দেশ্য সি এবং দ্রুত চালনাবেন। তারপরে আপনি আপনার সুইফ্ট প্রকল্পে ওবিজে-সি কোডটি নির্বিঘ্নে ব্যবহার করতে পারেন (তবে এটি "পোডস" প্রকল্পের আওতায় লুকানো থাকবে), আপনাকে কেবলমাত্র যা করতে হবে তা হল আপনার "ব্রিজিং শিরোলেখ" বিকাশকারী.এপল.কম. / লাইব্রেরি /
প্রিরিলেজ

কোকোপডস সম্পর্কে কেবল পড়ুন ( রায়ওয়েন্ডারলিচ. com/ 97014/ use- cocoapods- with- sift ), আমি মনে করি যে আমার মস্তিষ্কের চিবানো খুব বেশি হবে। আমি ধারণাটি পেয়েছি তবে এটি টার্মিনালে বাস্তবায়িত করেছি, ওয়ার্কস্পেস ব্যবহার করুন, কোডটিতে আমার অ্যাপ্লিকেশনটি অন্য কোডের সাথে একত্রীকরণ করা না হওয়ার সাথে সাথে ... আমি কীভাবে এটি চাই তা দেখার জন্য / অভিনয় করার জন্য আসল মেনু ফাংশনটিকে টুইঙ্ক করে ... আমার মস্তিষ্ক চাইবে বিস্ফোরিত। আমি কীভাবে কেবল এই প্রবন্ধটি সিটি পেস্ট করব এবং আমার অ্যাপ্লিকেশনটিকে বলি যে আমি উভয় ভাষা ব্যবহার করছি। এর আগে এটি করেন নি তবে সহজ মনে হচ্ছে
ডেভ জি

1

এটি আপনার ভাবার চেয়ে সহজ। বাস্তবায়িত ইউআইটিএবলভিউ এবং ইউআইটিএবলভিউসেলকে সোয়াইপ করার ক্ষমতা সহ একটি সুইফ্ট শ্রেণির উদাহরণ এখানে।

import UIKit

class ViewController: UIViewController {

    // MARK: Properties

    let strings = ["firstString", "secondString", "thirdString"]

    // MARK: Outlets

    @IBOutlet weak var tableView: UITableView!

    // MARK: Lifecycle

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self
    }
}

extension ViewController: UITableViewDataSource, UITableViewDelegate {

    // MARK: UITableViewDataSource

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return objects.count
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath)
        let currentString = strings[indexPath.row]
        cell.textLabel?.text = currentString
        return cell
    }

    // MARK: UITableViewDelegate

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        tableView.deselectRow(at: indexPath, animated: true)
    }

    func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let leftAction = UIContextualAction(style: .normal, title:  "Red", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
            print("leftAction tapped")
            success(true)
        })

        leftAction.image = UIImage(named: "")
        leftAction.backgroundColor = UIColor.red

        return UISwipeActionsConfiguration(actions: [leftAction])
    }

    func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let rightAction = UIContextualAction(style: .normal, title:  "Green", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
            print("rightAction tapped")
            success(true)
        })

        rightAction.image = UIImage(named: "")
        rightAction.backgroundColor = UIColor.green

        return UISwipeActionsConfiguration(actions: [rightAction])
    }

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