2016-05-15 108 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) 

它必須工作。