2017-10-31 3 views
0

Ich habe eine Tabellenansicht, die ihre Zellen ändert, basierend auf welcher Taste gedrückt wird. In der ersten Tabellenansicht möchte ich die Zelle nur wischen können, wenn die Schaltfläche gedrückt wird; Wenn dies nicht der Fall ist, sollte die Swipe-Funktion deaktiviert sein. Wenn die Taste gedrückt wird, ist die Tabellenansicht wischbar und zeigt die gewünschte Aktion an. Wenn die Schaltfläche jedoch nicht gedrückt wird, kann die Zelle weiterhin mit einer "Lösch" -Aktion getippt werden. Ich möchte auch nicht, dass eine Zeile wischbar ist, wenn das Zellenlabel den Namen des aktuellen Benutzers enthält.Wischen erlaubt nur bei bestimmten Zellen

Ich habe meinen Code für die Tabellenansicht am unteren Rand hinzugefügt. Wie behebe ich das?

-Code für die erste Tabelle:

override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { 
       let cell = tableView.cellForRow(at: indexPath) as! DetailsCell 
       let detailsAction = UITableViewRowAction(style: UITableViewRowActionStyle.default, title: "Details") { (action , indexPath) -> Void in 
         if isCharacterButtonPressed == true { //if button is pressed 
          if cell.label != currentUser.name{ 
           let viewController = self.storyboard?.instantiateViewController(withIdentifier: "SeeDetails") as! DetailsVC 
           viewController.person = cell.person    
     self.navigationController?.pushViewController(viewController, animated: true) 
          } else { 
           return .none 
          } 
          return [detailsAction] //makes cell swipe-able 
         } else { //if button is not pressed 
          return .none //do not make the cell swipe-able 
         } 
       } 

EDIT:

Ich habe es mit der canEditRow Funktion festgelegt, aber diese roten Kreise zeigen auf der Seite der Zellen auf, die geklaut werden kann, wenn ich wische sie. Wie behebe ich das? Ich habe einen Screenshot davon angehängt: enter image description here

Antwort

1

Wenn Sie prüfen, ob bearbeiten Aktionen anzuzeigen oder nicht in tableView(_: UITableView, editActionsForRowAt: IndexPath), wird der Benutzer Erfahrung schlampig sein, weil, wenn ein leeres Array von Aktionen zurückzukehren keine Bearbeitungsaktionen zu zeigen, die Zelle erscheint, als ob es für einen Moment geklaut wurde und dann nicht mehr auf den Swipe reagiert. Stattdessen sollten Sie prüfen, ob die Editieraktionen für eine Zelle angezeigt werden sollen oder nicht, indem Sie verwenden und dann die andere Funktion verwenden, um die Aktionen tatsächlich anzuzeigen, wenn die Zelle auswählbar ist.

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { 
    let cell = tableView.cellForRow(at: indexPath) as! DetailsCell 
    if isCharacterButtonPressed == true && cell.label != currentUser.name{ 
     return true 
    } else { 
     return false 
    } 
} 
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { 
    let cell = tableView.cellForRow(at: indexPath) as! DetailsCell 
    let detailsAction = UITableViewRowAction(style: UITableViewRowActionStyle.default, title: "Details") { (action , indexPath) -> Void in 
    let viewController = self.storyboard?.instantiateViewController(withIdentifier: "SeeDetails") as! DetailsVC 
    viewController.person = cell.person    
    self.navigationController?.pushViewController(viewController, animated: true) 
    }   
    return [detailsAction]   
} 
0

Verwenden entweder tableView(_: UITableView, editActionsForRowAt: IndexPath) oder MGSwipTableCell, erstellen bool (d.h allowSwipe), erlauben nur editing/wischen, wenn die bool wahr ist

Verwandte Themen