Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在Popover中禁用编辑UITableViewController_Ios_Swift_Uitableview_Popover_Editing - Fatal编程技术网

Ios 如何在Popover中禁用编辑UITableViewController

Ios 如何在Popover中禁用编辑UITableViewController,ios,swift,uitableview,popover,editing,Ios,Swift,Uitableview,Popover,Editing,我在FirstViewController中打开编辑表 @IBAction func editButtonPressed(sender: UIBarButtonItem) { self.tableView.allowsMultipleSelectionDuringEditing = true if self.editing { let popoverEditMenu = self.storyboard?.instantiateViewControllerW

我在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
      }
}
func endEditing() {
    self.editing = false
    editButton.image = UIImage(named: "1461294921_15.Pencil")
}
已成功包含编辑表。完成上述操作后,我想通过单击弹出窗口中的表格单元格来完成编辑,代码:

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
    }
}
但是按钮图像没有变化,并且未禁用表格编辑模式

尝试使用

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

它必须工作。

找到解决方案

这个问题是通过授权解决的。感谢@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中指定委托继承

@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
      }
}
func endEditing() {
    self.editing = false
    editButton.image = UIImage(named: "1461294921_15.Pencil")
}

问题是您正在创建FirstTableViewController的一个全新实例,它与显示popover的原始实例完全不同。有几种方法可以实现您想要的,不过在本例中,我建议使用委托/协议模式。请参见中的“将数据传递回上一个视图控制器”。您还应该记住@Alexey下面的答案,这也是很重要的。@pbasdf谢谢:)。。。但不要直接在UIButton上设置
image
:根据@AlexeyShavitov的回答使用
setImage:forState:
。除非您这样做,否则按钮在改变状态时可能会“忘记”图像。@pbasdf我有导航栏按钮。她没有道歉,我应该从上下文中看出来。忽略我之前的评论。