2017-07-17 4 views
0

Wenn ich 2-3 TableView habe, wie kann ich die 'Delete'-Zeile nur für das bestimmte TableView deaktivieren? Wenn ich Haltepunkt gesetzt für if-Anweisung zu prüfen, welche Tableview verwendet wird, ist es nicht funktioniertZeile mit mehreren TableView löschen

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
    if tableView == self.firstTableView { 
     if editingStyle == .delete { 
      array.remove(at: indexPath.row) 
      firstTableView.deleteRows(at: [indexPath], with: .fade) 
      firstTableView.reloadData() 
     } 
    } 
} 

Ich habe versucht, den Bearbeitungsmodus zu falsch in viewDidLoad für secondTableView zu setzen, aber es funktioniert auch nicht.

secondTableView.setEditing(false, animated: false) 

Ich verstehe, dass es auf false gesetzt standardmäßig, also dachte ich, wenn commit editingStyle es für alle Tableviews ermöglichen, so kann ich es für die zweite deaktivieren.

Antwort

1

Geben Sie einfach jedes TableView ein Tag und überprüfen Sie es in einer if oder switch Aussage.

if tableView.tag == 0 { 
    if editingStyle == .delete { 
     array.remove(at: indexPath.row) 
     tableView.deleteRows(at: [indexPath], with: .fade) 
     tableView.reloadData() 
    } 
} 
+0

Ich versuchte dies auch. Es funktioniert nicht. Wie auch immer, beide TableView haben die Möglichkeit, die Option zu löschen. – Sargot

+0

Nur zur Klarstellung, möchten Sie das Löschen im Bearbeitungsmodus deaktivieren oder keine Schaltfläche zum Löschen haben, wenn Sie auf eine Zelle nach links schieben? – nighttalker

+0

Keine Schaltfläche zum Löschen, wenn Sie nach links schieben. – Sargot

0

Die richtige Antwort für Tag wird die Überprüfung in editingStyleForRowAt indexPath

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { 
    if tableView.tag == 1 { 
     return UITableViewCellEditingStyle.delete 
    } else { 
     return UITableViewCellEditingStyle.none 
    } 

} 
0

können Sie verwenden:

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

     // Return false if you do not want the specified item or table to be editable. 
     if tableView == tableVw { 
      return false 
     } else { 
      return true 
     } 
    } 

Hier tableVw ist ein tableview Objekt, das Sie wollen nicht bearbeitet oder Sie können auch Verwenden Sie das Tag anstelle des Objektvergleichs. Dann verwenden Sie:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 
     if editingStyle == .delete { 

      //Write your delete cell logic here 
      array.remove(at: indexPath.row) 
      tableView.deleteRows(at: [indexPath], with: .fade) 
      tableView.reloadData() 
     } 
} 
+0

Vielen Dank für Ihre Antwort. Ich bin mir nicht sicher, ob ich das als richtige Antwort angeben soll, da ich bereits auf meine Frage mit den gleichen Informationen geantwortet habe. – Sargot

+0

Sie müssen canEditRowAt Tabellenansicht Funktion verwenden, wie ich oben erwähnt und dann überprüfen Sie ihre Arbeit oder nicht –

+0

ja, das ist logisch zu implementieren Delete-Funktionalität zuerst. Ich dachte, dass es keinen Sinn hat, es in meiner Antwort zu sagen, also habe ich gerade die Antwort gepostet, wo die wahre Magie passiert. Trotzdem danke! – Sargot

Verwandte Themen