2016-05-15 13 views
1

Ich schalte den Schneidetisch in der FirstViewControllerWie Bearbeitung UITableViewController in Popover

@IBAction func editButtonPressed(sender: UIBarButtonItem) { 
    self.tableView.allowsMultipleSelectionDuringEditing = true 
    if self.editing { 
      let popoverEditMenu = self.storyboard?.instantiateViewControllerWithIdentifier("popoverEditMenu") as! EditMenuTableViewController 
      popoverEditMenu.modalPresentationStyle = .Popover 
      popoverEditMenu.popoverPresentationController!.delegate = self 
      let popover: UIPopoverPresentationController = popoverEditMenu.popoverPresentationController! 
      popover.barButtonItem = sender 
      presentViewController(popoverEditMenu, animated: true, completion: nil) 
     } else { 
      editButton.image = UIImage(named: "profile_more") 
      self.editing = !self.editing 
     } 
} 

bearbeiten Tabelle deaktivieren erfolgreich enthalten. Nach den oben genannten Aktionen, mag ich die Bearbeitung beenden, indem sie in einem popover, Code auf einer Tabellenzelle klicken:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let firstTableVC = self.storyboard?.instantiateViewControllerWithIdentifier("firstTableVC") as! FirstTableViewController 

    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    switch indexPath.row { 
    case 0: 
     self.dismissViewControllerAnimated(true, completion: nil) 
     firstTableVC.editing = false // Disable Editing 
     firstTableVC.editButton.image = UIImage(named: "1461294921_15.Pencil") 
    default: 
     break 
    } 
} 

Aber es gibt keine Änderung in der Schaltfläche Bild und Tabellenbearbeitungsmodus nicht

+1

Das Problem angeben, dass Sie eine völlig neue Instanz von FirstTableViewController schaffen, die sich von der ursprünglichen Instanz von dem völlig getrennt ist popover präsentiert wird. Es gibt mehrere Möglichkeiten, um das zu erreichen, was Sie wollen, aber in diesem Fall würde ich ein Delegierten/Protokoll-Muster empfehlen. Siehe "Zurückgeben von Daten an den vorherigen Ansichtscontroller" in [diese Antwort] (http://stackoverflow.com/a/31934786). Sie sollten auch @ Alexey's Antwort beachten, die auch wichtig ist. – pbasdf

+0

@pbasdf danke :) –

Antwort

1

Lösung gefunden!

Das Problem wurde durch den Einsatz von Delegation gelöst. Danke an @pbasdf für den Tipp

import UIKit 

protocol SecondTableViewControllerDelegate { 
    func endEditing() 
} 

class SecondTableViewController: UITableViewController { 

    var delegate: SecondTableViewControllerDelegate? 

    ... 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
     switch indexPath.row { 
     case 0: 
      self.dismissViewControllerAnimated(true, completion: nil) 
      delegate?.endEditing() 
     default: 
      break 
     } 
    } 
} 

Delegate-Funktion in FirstViewController. Sie benötigen einen Delegaten Erbe in FirstViewController

func endEditing() { 
    self.editing = false 
    editButton.image = UIImage(named: "1461294921_15.Pencil") 
} 
+0

... aber nicht 'image' auf einem UIButton direkt: Verwenden Sie' setImage: forState: 'nach @ AlexeyShavitov die Antwort. Wenn Sie dies nicht tun, kann die Schaltfläche das Bild "vergessen", wenn es den Status ändert. – pbasdf

+0

@pbasdf Ich habe Navigationstaste. Sie hat keine setImage-Methode –

+0

Entschuldigung, ich hätte das aus dem Zusammenhang gesehen. Ignoriere meinen vorherigen Kommentar. – pbasdf

0

deaktiviert Versuchen Sie zu verwenden

firstTableVC.editButton.setImage(UIImage(named:"1461294921_15.Pencil"), forState: UIControlState.Normal) 

Es muss funktionieren.