2016-05-15 111 views
1

我打开编辑表中FirstViewController如何酥料饼

@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 
     } 
} 

编辑表被成功列入禁用编辑的UITableViewController。上述行动后,我要完成编辑,通过单击表格单元格在一个酥料饼,代码:

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 
    } 
} 

但有按钮图像中没有变化,表格编辑模式未被禁用

+1

指定一个委托继承的问题是,你正在创建FirstTableViewController,这是从该酥料饼呈现原始实例完全独立的一个完全新的实例。有几种方法可以实现你想要的,但在这种情况下,我会推荐一个委托/协议模式。请参阅[本答案](http://stackoverflow.com/a/31934786)中的“将数据传回给以前的视图控制器”。你还应该记住@阿列克谢的答案,这也很重要。 – pbasdf

+0

@pbasdf谢谢:) –

回答

1

找到解决方案!

问题是通过使用委托解决的。感谢@pbasdf的提示

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 
     } 
    } 
} 

在FirstViewController中委托函数。您需要FirstViewController

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

...但不要直接在UIButton上设置'image':根据@ AlexeyShavitov的回答,使用'setImage:forState:'。除非你这样做,否则当它改变状态时,按钮可以“忘记”图像。 – pbasdf

+0

@pbasdf我有导航栏按钮。她没有setImage方法 –

+0

道歉,我应该从上下文中看到。忽略我以前的评论。 – pbasdf

0

尝试使用

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

它必须工作。