2016-06-27 4 views
0

Ich habe meine App eingerichtet, so dass ich eine Zelle zu einem ViewController hinzufügen kann, wo die Zelle in der Tabelle angezeigt wird, aber wenn Sie auf die Zelle klicken, wird es erweitert, um mehr anzuzeigen Information. Hier ist der Code ...Wie bekomme ich die tableViewCell nicht zu erweitern, wenn Swipe zu löschen

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var selectedIndexPath: NSIndexPath? = nil 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.registerNib(UINib(nibName: "CustomViewCell", bundle: nil), forCellReuseIdentifier: "Cell") 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomViewCell 

    cell.clipsToBounds = true 

    return cell 

} 

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    if selectedIndexPath != nil { 

     if indexPath == selectedIndexPath { 
      return 140 
     } else { 
      return 38 
     } 

    } else { 
     return 38 
    } 

} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    // New 
    switch selectedIndexPath { 
    case nil: 
     selectedIndexPath = indexPath 
    default: 
     if selectedIndexPath! == indexPath { 
      selectedIndexPath = nil 
     } else { 
      selectedIndexPath = indexPath 
     } 
    } 

    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) 

} 

Alles funktioniert gut mit der Erweiterung und Schließen für die Zelle, außer dass ich die Zelle konfiguriert ist, um Swipe zu löschen, aber die Zelle gerade ausdehnt, wenn ich löschen streichen. Heres der Code:

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


    let deleteAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Delete") { (action , indexPath) -> Void in 
     self.editing = false  
     let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     let moc = appDelegate.managedObjectContext 
     moc.deleteObject(self.events[indexPath.row]) 
     appDelegate.saveContext()    
     self.events.removeAtIndex(indexPath.row) 
     tableView.reloadData() 

    } 

    return [deleteAction] 

} 

Before swipe to delete

After swipe to delete

ich die Zelle wie es erweitern das nicht wollen, ist, wenn ich löschen Swipe, Irgendwelche Ideen?

Antwort

1

Ich denke, Sie kann derjenige sein, der die Zelle erweitert. Sie sagen:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if indexPath == selectedIndexPath { 
     return 140 
    } 
} 

Wird diese Methode beim Wischen zum Löschen aufgerufen? Verwenden Sie das Debuggen, um das herauszufinden. Wenn dies der Fall ist, müssen Sie diesen Code so umschreiben, dass Sie 140 nicht zurückgeben, nur für den Fall, dass Sie gerade streichen.

+0

Ich habe versucht, die 140 auf 38 zu ändern und dachte, dass es so ist würde sich überhaupt nicht ausdehnen, wenn ich geklaut habe, aber es ist so, ich glaube nicht, dass dieser Teil des Codes eine Auswirkung darauf hat. Es kehrt einfach zur normalen Größe der Zelle zurück, wenn es geklaut wird. –