我在UIViewController中有一个表视图,启用了删除行的编辑功能。从右边滑动可以让我删除行,导航栏上有编辑按钮,但实际上并没有做任何事情,除了从编辑到完成切换。
以下是我创建表格视图的方法。
override func viewWillAppear(animated: Bool) {
for view in self.view.subviews {
view.removeFromSuperview()
}
if sharedCart.shoppingCart.isEmpty {
self.navigationItem.rightBarButtonItem = nil
isEmptyLabel = UILabel(frame: CGRectMake(self.view.frame.width / 2, self.view.frame.height / 2, self.view.frame.width, self.view.frame.height))
isEmptyLabel.center = self.view.center
isEmptyLabel.text = "Your cart is empty."
isEmptyLabel.textAlignment = .Center
isEmptyLabel.textColor = UIColor.whiteColor()
isEmptyLabel.font = UIFont(name: "Helvetica-Light", size: 20.0)
self.view.addSubview(isEmptyLabel)
} else {
isEmptyLabel.removeFromSuperview()
total = 0
let editItem = self.editButtonItem()
self.navigationItem.rightBarButtonItem = editItem
tableView = UITableView(frame: self.view.frame, style: .Grouped)
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundColor = UIColor.clearColor()
tableView.contentInset = UIEdgeInsetsMake(44, 0, 0, 0)
tableView.registerNib(UINib(nibName: "CartCell", bundle: nil), forCellReuseIdentifier: "passCartCell")
tableView.registerNib(UINib(nibName: "CartFooterView", bundle: nil), forHeaderFooterViewReuseIdentifier: "cartFooter")
self.view.addSubview(tableView)
}
我使用这些方法进行编辑。
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
sharedCart.shoppingCart.removeAtIndex(indexPath.row)
self.viewWillAppear(true)
}
}
答案 0 :(得分:2)
对于 Swift 3 ,请在 UIViewController 类中实现:
override func setEditing(_ editing: Bool, animated: Bool) {
if(editing && !tableView.isEditing){
tableView.setEditing(true, animated: true)
}else{
tableView.setEditing(false, animated: true)
}
}
(对于UITableViewController类,这不是必需的)。
您还应该在之前设置 editButtonItem :
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = editButtonItem
}
然后它的作品!ツ
答案 1 :(得分:1)
为了让您的桌子在按钮点按时在编辑和普通模式之间切换,您需要实现
func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
if self.tableView.editing {
return UITableViewCellEditingStyle.Delete
}
else{
return UITableViewCellEditingStyle.None
}
}
按下按钮或按钮的IBAction:)
@IBAction func editButtonTapped(sender: AnyObject) {
var button = sender as! UIButton
if button.titleLabel!.text! == "Edit" {
self.tableView.editing = true
button.setTitle("Done", forState: UIControlState.Normal)
}
else{
self.tableView.editing = false
button.setTitle("Edit", forState: UIControlState.Normal)
}
}
修改强> 刚刚意识到导航栏上有条形按钮项,而不是简单的UIButton:)
所以你可以修改如下的IBAction :)确保你选择UIBarButton项目的系统项作为自定义并将标题设置为编辑
@IBAction func editButtonTapped(sender: AnyObject) {
let button = sender as! UIBarButtonItem
if button.title! == "Edit" {
self.tableView.editing = true
button.title = "Done"
}
else{
self.tableView.editing = false
button.title = "Edit"
}
}
这应该做的工作:)快乐编码:)
答案 2 :(得分:1)
塞德里克·迈克尔(Cedric Michael)的答案几乎可以奏效,但是它禁用了Using
在 Edit 和 Done 标题及相关状态之间的自动动画切换。更好的解决方法是:
editButtonItem
此外,如果您要隐藏空白购物车的 Edit 按钮,最好在override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: animated)
tableView.setEditing(editing, animated: animated)
}
中设置navigationItem.rightBarButtonItem = editButtonItem
并简单地设置{{1 }}根据购物车在viewDidLoad()
中为true或false。