Ios 如何在Popover中禁用编辑UITableViewController
我在FirstViewController中打开编辑表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
@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我有导航栏按钮。她没有道歉,我应该从上下文中看出来。忽略我之前的评论。