UITableViewCell, hızlıca kaydırmada sil düğmesini göster


568

Bir kaydırırken silme düğmesini nasıl gösterebilirim UITableViewCell? Etkinlik asla yükseltilmez ve sil düğmesi hiçbir zaman görünmez.


1
Ayrıntılı ve güncel bir cevap arayan herkes, stackoverflow.com/a/37719543/6872794
Munib

S eylemlerini silmek için hızlıca kaydırmanın 3 farklı yolunu gösteren benzer bir soru için Swift 4 yanıtımı görün UITableViewCell.
Imanou Petit

Bu soruyu 8 yıl önce sordum ... lütfen bu soruyu silin, çok eski. Swift bile yoktu!
Öğrenci

hızlıca kaydırma düğmeleri için yükseklik düzeltmesi yapabilir miyiz? örneğin: benim hücre 150 ve düğme sadece 50.0f göstermek istiyorum mümkün mü?
Suhas Arvind Patil

Bu satırlar üzerinde harika çalışıyor, ancak bölümleri nasıl entegre edeceğinize dair ipuçları var mı?
Frostmourne

Yanıtlar:


1035

Başlangıç ​​sırasında (-viewDidLoad or in storyboard):

self.tableView.allowsMultipleSelectionDuringEditing = NO;

Tablo görünümünün koşullu düzenlenmesini desteklemek için geçersiz kıl. Bu, yalnızca NObazı öğeler için iade ediyorsanız uygulanmalıdır . Varsayılan olarak, tüm öğeler düzenlenebilir.

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return YES if you want the specified item to be editable.
    return YES;
}

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //add code here for when you hit delete
    }    
}

94
Bu çalışıyor, ancak ... - (BOOL) tableView: (UITableView *) tableView canEditRowAtIndexPath: (NSIndexPath *) indexPath ... sadece bazı öğeler için NO döndürüyorsanız uygulanmalıdır. Varsayılan olarak, tüm öğeler düzenlenebilirdir, bu nedenle her zaman YES döndürüyorsanız onu uygulamanız gerekmez.
Thanos Diacakis

24
Ayrıca bilmek de önemlidir: bunlar UITableViewDataSource yöntemleri ve NOT UITableViewDelegate yöntemleridir.
Dave Albert


12
Açık olmak gerekirse - tableView: commitEditingStyle: forRowAtIndexPath: 'i geçersiz kılmalısınız ZORUNLU veya hızlıca kaydırma hareketi tanınmaz ve silmeye çalıştığınızda hiçbir şey olmaz.
Chris

Bu benim için işe yaramadı (ilk başta). Ayrıca self.tableView.allowsMultipleSelectionDuringEditing = NO;sol kaydırma hareketinin çalışması için ayar yapmam gerekiyordu . Bu benim için bir hata gibi geliyor çünkü tablo düzenleme durumunda DEĞİL. Bu seçenek yalnızca "Düzenleme Sırasında" uygulanmalıdır. Ancak, şimdi çalışıyor ve tablo düzenleme durumuna her girdiğinde bunu EVET olarak ayarladım.
osxdirk

118

Bu cevap Swift 3 olarak güncellendi

Her zaman çok basit, müstakil bir örneğe sahip olmanın iyi olduğunu düşünüyorum, böylece yeni bir görev öğrenirken hiçbir şey varsayılmıyor. Bu cevap UITableViewsatırları silmek içindir . Proje şu şekilde çalışır:

resim açıklamasını buraya girin

Bu proje Swift için UITableView örneğine dayanmaktadır .

Kodu Ekleyin

Yeni bir proje oluşturun ve ViewController.swift kodunu aşağıdaki ile değiştirin.

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    // These strings will be the data for the table view cells
    var animals: [String] = ["Horse", "Cow", "Camel", "Pig", "Sheep", "Goat"]

    let cellReuseIdentifier = "cell"

    @IBOutlet var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // It is possible to do the following three things in the Interface Builder
        // rather than in code if you prefer.
        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
        tableView.delegate = self
        tableView.dataSource = self
    }

    // number of rows in table view
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.animals.count
    }

    // create a cell for each table view row
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell:UITableViewCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as UITableViewCell!

        cell.textLabel?.text = self.animals[indexPath.row]

        return cell
    }

    // method to run when table view cell is tapped
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("You tapped cell number \(indexPath.row).")
    }

    // this method handles row deletion
    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

        if editingStyle == .delete {

            // remove the item from the data model
            animals.remove(at: indexPath.row)

            // delete the table view row
            tableView.deleteRows(at: [indexPath], with: .fade)

        } else if editingStyle == .insert {
            // Not used in our example, but if you were adding a new row, this is where you would do it.
        }
    }

}

Yukarıdaki kodda satır silmeyi sağlayan tek tuş yöntemi sonuncudur. İşte yine vurgulamak için:

// this method handles row deletion
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {

        // remove the item from the data model
        animals.remove(at: indexPath.row)

        // delete the table view row
        tableView.deleteRows(at: [indexPath], with: .fade)

    } else if editingStyle == .insert {
        // Not used in our example, but if you were adding a new row, this is where you would do it.
    }
}

Film Şeridi

UITableViewFilm şeridindeki Görünüm Denetleyicisine bir ekleyin . Tablo görünümünün dört tarafını Görünüm Denetleyicisinin kenarlarına sabitlemek için otomatik düzeni kullanın. Film şeridindeki tablo görünümünden @IBOutlet var tableView: UITableView!koddaki satıra sürükleyin .

bitmiş

Bu kadar. Uygulamanızı şimdi çalıştırabilir ve sola hızlıca kaydırarak ve "Sil" e hafifçe vurarak satırları silebilirsiniz.


Varyasyonlar

"Sil" düğmesi metnini değiştirme

resim açıklamasını buraya girin

Aşağıdaki yöntemi ekleyin:

func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? {
    return "Erase"
}

Özel düğme eylemleri

resim açıklamasını buraya girin

Aşağıdaki yöntemi ekleyin.

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

    // action one
    let editAction = UITableViewRowAction(style: .default, title: "Edit", handler: { (action, indexPath) in
        print("Edit tapped")
    })
    editAction.backgroundColor = UIColor.blue

    // action two
    let deleteAction = UITableViewRowAction(style: .default, title: "Delete", handler: { (action, indexPath) in
        print("Delete tapped")
    })
    deleteAction.backgroundColor = UIColor.red

    return [editAction, deleteAction]
}

Bunun yalnızca iOS 8'de mevcut olduğunu unutmayın. Daha fazla ayrıntı için bu cevaba bakın.

İOS 11 için güncellendi

Eylemler, iOS 11'deki UITableViewDelegate API'sine eklenen yöntemler kullanılarak hücreye öncülük edebilir veya onu takip edebilir.

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

         return UISwipeActionsConfiguration(actions: [editAction])
 }

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

     return UISwipeActionsConfiguration(actions: [deleteAction])
 }

daha fazla okuma


örnekler ve kod için teşekkürler. Şimdi silme işlevini uygulamaya hazırım. Lütfen bana viewDidLoad () öğesine eklediğiniz "self.tableView.registerClass (..." satırının amacının ne olduğunu söyleyebilir misiniz? Arayüz oluşturucuda bunun eşdeğeri nedir? Şimdi iki kez cellReuseIdentifier belirtiyoruz gibi görünüyor.
Rockhammer


@rockhammer, Haklısınız, hem kodda hem de Arayüz Oluşturucu'da hücre yeniden kullanım tanımlayıcısını ayarlamanıza gerek yok (görünüşte yapamazsınız). Tercihinize göre sadece bir yol seçin. Bu proje dayalı olsa o temel UITableViewbirinde , bu tamamen stand alone projedir ve burada açıklanmayan bir şey yapmak gerekmez. Kodda ayarlamaya başlamamın nedeni, cevaplarımda daha az açıklama gerektirmesidir. Geri dönüp kod da kullanmak için temel örnek düzenlemek gerekir.
16'da Suragch

Nasıl doğru tokatlamak uygulanır? Sola kaydırmanın bir şeyi "reddettiğini" ve sağ kaydırmanın hücrede bir şeyi "kabul ettiğini" varsayalım.
Munib

1
@ return0, bildiğim kadarıyla, doğru kaydırma işlevi yerleşik değildir, bu yüzden sıfırdan oluşturmanız gerekir. Denemek isterseniz başlamanıza yardımcı olacak fikirler için bu makaleye bakın . Ancak, kullanıcının beklediği standart bir işlem olmadığından bunu yapmanızı önermem. Bunun yerine, yukarıdaki cevabımdaki özel düğme eylemi bölümünde olduğu gibi sol kaydırmada iki düğme seçeneği gösterirdim.
Suragch

70

Bu kod, silme işleminin nasıl uygulanacağını gösterir.

#pragma mark - UITableViewDataSource

// Swipe to delete.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [_chats removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }
}

İsteğe bağlı olarak, başlatma geçersiz kılmanızda, Düzenle düğmesi öğesini göstermek için aşağıdaki satırı ekleyin:

self.navigationItem.leftBarButtonItem = self.editButtonItem;

Bu yöntemi uygulamanız gerekiyor. İçindeki içerik, kullanım durumunuz için anlamlı olanlarla eşleşmelidir. _Chats üstündeki kodda tablo görünümünün yedekleme verileri bulunur. Kullanıcı silme işlemini gerçekleştirdiğinde, veri kaynağının yeni satır sayısını (aksi takdirde istisna atma) yansıtması için bireysel sohbet nesnesinin _chat'ten kaldırılması gerekir.
ewcy

25

Çözmeyi başardığım bir sorun yaşadım, bu yüzden birisine yardımcı olabileceği için paylaşıyorum.

Bir UITableView var ve silmek için tokatlamak etkinleştirmek için gösterilen yöntemleri ekledi:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return YES if you want the specified item to be editable.
    return YES;
}

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //add code here for when you hit delete
    }    
}

Tablo düzenleme moduna koymak ve çoklu seçim sağlayan bir güncelleme üzerinde çalışıyorum. Bunu yapmak için Apple'ın TableMultiSelect kodunu ekledim örneğindeki . Bu çalışmayı aldıktan sonra, silme işlevimin çalışmayı durdurduğunu buldum.

ViewDidLoad'a aşağıdaki satırı eklemenin sorun olduğu ortaya çıktı:

self.tableView.allowsMultipleSelectionDuringEditing = YES;

Bu satır girildiğinde, çoklu seçim işe yarayacak, ancak silmek için hızlıca kaydırma hareketi çalışmaz. Çizgi olmadan bu tam tersi oldu.

Çözüm:

ViewController'ınıza aşağıdaki yöntemi ekleyin:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    self.tableView.allowsMultipleSelectionDuringEditing = editing; 
    [super setEditing:editing animated:animated];
}

Ardından, tabloyu düzenleme moduna getiren yönteminizde (örneğin bir düğmeye basarak) şunları kullanmalısınız:

[self setEditing:YES animated:YES];

onun yerine:

[self.tableView setEditing:YES animated:YES];

Bu, çoklu seçimin yalnızca tablo düzenleme modundayken etkinleştirildiği anlamına gelir.


Bu yardımcı oldu. Storyboard'da allowMultipleSelection ayarlamıştım. Bu sorunu düzeltti.
Mark Suman

1
Bu bizi deli eden bir sorunu çözdü. Artık "silmek için hızlıca kaydır" ve "düzenleme modunda toplu silme" işlemlerinin birbirini dışladığını ve düzenleme moduna girerken / ayrılırken bunu kontrol etmeniz gerektiğini anlıyorum. Bunu araştırdığınız için çok teşekkürler!
fbitterlich

18

Aşağıda UITableViewDataSource tokatlamak silmek için yardımcı olacaktır

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return YES if you want the specified item to be editable.
    return YES;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [arrYears removeObjectAtIndex:indexPath.row];
        [tableView reloadData];
    }
}

arrYears bir NSMutableArray ve sonra tableView yeniden

hızlı

 func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
            return true
        }

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == UITableViewCellEditingStyleDelete {
        arrYears.removeObjectAtIndex(indexPath.row)
        tableView.reloadData()
    }
}

Ama bu UITableViewDataSource
HotJard

17

İOS 8 ve Swift 2.0'da lütfen bunu deneyin,

override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
   // let the controller to know that able to edit tableView's row 
   return true
}

override func tableView(tableView: UITableView, commitEdittingStyle editingStyle UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)  {
   // if you want to apply with iOS 8 or earlier version you must add this function too. (just left in blank code)
}

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]?  {
   // add the action button you want to show when swiping on tableView's cell , in this case add the delete button.
   let deleteAction = UITableViewRowAction(style: .Default, title: "Delete", handler: { (action , indexPath) -> Void in

   // Your delete code here.....
   .........
   .........
   })

   // You can set its properties like normal button
   deleteAction.backgroundColor = UIColor.redColor()

   return [deleteAction]
}

Bu iyi bir cevaptır, bununla birden fazla eylem de ayarlayabilirsiniz.
Munib

11

@ Kurbz'un cevabı harika, ama bu notu bırakmak istiyorum ve bu cevabın insanları biraz zaman kazandıracağını umuyorum.

Bazen bu satırları denetleyicimde tuttum ve kaydırma özelliğini çalıştıramadılar.

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleNone; 
}

Düzenleme stili olarak UITableViewCellEditingStyleInsertveya kullanıyorsanız UITableViewCellEditingStyleNone, kaydırma özelliği çalışmaz. Yalnızca UITableViewCellEditingStyleDeletevarsayılan stil olan kullanabilirsiniz .


1
Benim durumumda silmek için hızlıca kaydırmak istedim, ancak hücrelerimi de hareket ettirebildim. Hareketli bir hücre, tasarımımıza uymayan ve düzenleme stilini kaldırmak için hücrenin sol tarafındaki bu "sil" düğmesini de alır. Bunu "tableView.isEditing {return .none} else {return .delete}" ile

Axz dostum kurtardı. Teşekkürler :)
Sourav Chandra

9

Hızlı 4

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let delete = UITableViewRowAction(style: .destructive, title: "delete") { (action, indexPath) in
        // delete item at indexPath
    tableView.deleteRows(at: [indexPath], with: .fade)

    }
    return [delete]
}

1
Tamam, silme sekmesini gösterir, ancak bastığınızda silmez. Veri kaynağındaki nesneyi silmeniz ve tabloyu yeniden yüklemeniz gerekir mi?
user3069232

evet "// indexPath'teki öğeyi sil" indexPath'e göre silme satırınızın yer mantığı
Pratik Lad

8

Ayrıca bu, SWIFT'de aşağıdaki yöntem kullanılarak elde edilebilir.

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if (editingStyle == UITableViewCellEditingStyle.Delete){
        testArray.removeAtIndex(indexPath.row)
        goalsTableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
    }
}

8

Hızlı 3

Tek yapmanız gereken şu iki işlevi etkinleştirmektir:

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

    return true

}

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

    if editingStyle == UITableViewCellEditingStyle.delete {
        tableView.reloadData()
    }

}

7

Biliyorum eski soru, ama @Kurbz cevap sadece Xcode 6.3.2 ve SDK 8.3 için buna ihtiyacım var

Ben eklemek gerek [tableView beginUpdates]ve [tableView endUpdates](sayesinde @ bay.phillips burada )

// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    // Open "Transaction"
    [tableView beginUpdates];

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // your code goes here
        //add code here for when you hit delete
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
     }

    // Close "Transaction"
    [tableView endUpdates];
}

6

Tablo görünümünüzün bir hücresini kaldırdığınızda, dizin nesnenizi x dizininden de kaldırmanız gerekir.

Kaydırma hareketi kullanarak kaldırabileceğinizi düşünüyorum. Tablo görünümü Temsilci'yi arayacaktır:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //add code here for when you hit delete
        [dataSourceArray removeObjectAtIndex:indexPath.row];
    }    
}

Nesneyi çıkardıktan sonra. Tableview kullanımını yeniden yüklemelisiniz. Kodunuza aşağıdaki satırı ekleyin:

[tableView reloadData];

bundan sonra satırı başarıyla sildiniz. Görünümü yeniden yüklediğinizde veya DataSource'a veri eklediğinizde nesne artık orada olmayacaktır.

Diğerleri için Kurbz'dan gelen cevap doğru.

Yalnızca nesneyi DataSource dizisinden kaldırmak istiyorsanız, temsilci işlevinin yeterli olmayacağını hatırlatmak istedim.

Umarım sana yardım etmişimdir.



6
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        //add code here for when you hit delete
        [dataSourceArray removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }    
}    

dataSourceArray hücre içeriğinin geldiği dizidir
Rahul K Rajan

2

Hızlı 2.2:

override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
    return true
}

override func tableView(tableView: UITableView,
    editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
    let delete = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "DELETE"){(UITableViewRowAction,NSIndexPath) -> Void in

    print("Your action when user pressed delete")
}
let edit = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "EDIT"){(UITableViewRowAction,NSIndexPath) -> Void in

    print("Your action when user pressed edit")
}
    return [delete, block]
}

2

Swift için, sadece bu kodu yaz

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        if editingStyle == .Delete {
            print("Delete Hit")
        }
}

Amaç C için, sadece bu kodu yazın

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
       if (editingStyle == UITableViewCellEditingStyleDelete) {           
            NSLog(@"index: %@",indexPath.row);
           }
}

2

swift4 kodu için önce düzenlemeyi etkinleştirin:

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

ardından düzenleme temsilcisine silme işlemi eklersiniz:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let action = UITableViewRowAction(style: .destructive, title: "Delete") { (_, index) in
        // delete model object at the index
        self.models[index.row]
        // then delete the cell
        tableView.beginUpdates()
        tableView.deleteRows(at: [index], with: .automatic)
        tableView.endUpdates()

    }
    return [action]
}

0

Hızlı 4,5

Hızlıca kaydırıldığında bir hücreyi silmek için iki yerleşik UITableView yöntemi vardır.

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
        let delete = deleteProperty(at: indexPath)
        return UISwipeActionsConfiguration(actions: [delete])
    }

//Declare this method in Viewcontroller Main and modify according to your need

func deleteProperty(at indexpath: IndexPath) -> UIContextualAction {
        let action = UIContextualAction(style: .destructive, title: "Delete") { (action, view, completon) in
            self.yourArray.remove(at: indexpath) //Removing from array at selected index

            completon(true)
        action.backgroundColor = .red //cell background color
    }
        return action
    }

0

Değişken veri kaynaklarını benimsiyorsanız, temsilci geri çağrılarını bir UITableViewDiffableDataSourcealt sınıfa taşımanız gerekir . Örneğin:

class DataSource: UITableViewDiffableDataSource<SectionType, ItemType> {

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

    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            if let identifierToDelete = itemIdentifier(for: indexPath) {
                var snapshot = self.snapshot()
                snapshot.deleteItems([identifierToDelete])
                apply(snapshot)
            }
        }
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.