ios - 在 swift 中显示更多按钮时取消在 tableview 单元格上向左滑动

标签 ios swift uitableview

我想知道是否有适当的方法来取消在 tableview 单元格上向左滑动,以便它向后滑动以隐藏按钮。我不太确定如何正确地说出来,大声笑。但是请看下面的 GIF。在第一个 GIF 中,按下取消按钮后我没有代码,并且按钮保持可见。

enter image description here

我唯一的想法是用这段代码重新加载单元格而我更希望它看起来像单元格向右移回原位。请参阅下面的重新加载 GIF。

enter image description here

我应该如何正确地执行此操作?请参阅下面我添加按钮的代码及其功能。

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {

    let edit = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "Edit") {
        (action, indexPath) in

        if (indexPath == self.indexSelect) {
            print("Editting Selected Cell")
        } else {
            print("Editting a difference cell than selected")
        }

        let section: Sections = self.frc.objectAtIndexPath(indexPath) as! Sections
        let count: Int = self.sectionCount(section.section!)
        var msg: String?
        let sectionName: String = section.section!

        if (count > 0) {
            msg = "There are \(count) other Items using this Section currently. Editing the Section name \"\(sectionName)\" will affect them all. \n\nThis will be changed immediately!"
        }

        let alert = UIAlertController(title: "Edit Section Name", message: msg, preferredStyle: UIAlertControllerStyle.Alert)
        let editAction = UIAlertAction(title: "Edit", style: UIAlertActionStyle.Destructive) {
            UIAlertAction in

            let sectionName = Util.trimSpaces(alert.textFields![0].text!)

            if (sectionName != section.section) {
                if (Util.checkSectionName(sectionName, moc: self.moc!) == false) {
                    let entityDesc = NSEntityDescription.entityForName("Sections", inManagedObjectContext: self.moc!)
                    let newSection: Sections = Sections(entity: entityDesc!, insertIntoManagedObjectContext: self.moc)
                    newSection.section = sectionName

                    do {
                        try self.moc!.save()
                    } catch {
                        fatalError("New item save failed")
                    }

                    let oldSection: Sections = section

                    let fetchReq = NSFetchRequest(entityName: "Catalog")
                    let pred = NSPredicate(format: "sections.section == %@", oldSection.section!)
                    fetchReq.predicate = pred

                    do {
                        let results = try self.moc!.executeFetchRequest(fetchReq)
                        for rec in results {
                            let catalog: Catalog = rec as! Catalog
                            catalog.sections = newSection
                        }

                        do {
                            try self.moc!.save()
                        } catch {
                            fatalError("Failed to Save after Delete")
                        }
                    } catch {
                        fatalError("Fetching Items to delete section failed")
                    }

                    self.moc!.deleteObject(oldSection)

                    do {
                        try self.moc!.save()
                    } catch {
                        fatalError("Failed to Save after Delete")
                    }
                } else {
                    Util.msgAlert("Duplicate Section Name", msg: "\"\(sectionName)\" section name already exists.", curVC: self)
                    self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
                }
            } else {
                self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
            }
        }
        let cancel = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) {
            UIAlertAction in

            //self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
        }

        alert.addAction(editAction)
        alert.addAction(cancel)
        alert.addTextFieldWithConfigurationHandler {
            (txtFld) -> Void in

            txtFld.text = section.section
            txtFld.autocapitalizationType = UITextAutocapitalizationType.Words
            txtFld.autocorrectionType = UITextAutocorrectionType.Default
            txtFld.clearButtonMode = UITextFieldViewMode.WhileEditing
        }

        self.presentViewController(alert, animated: true, completion: nil)
    }

    edit.backgroundColor = UIColor.init(red: 84/255, green: 200/255, blue: 214/255, alpha: 1)

    let delete = UITableViewRowAction(style: .Destructive, title: "Delete") {
        (action, indexPath) in

        let section: Sections = self.frc.objectAtIndexPath(indexPath) as! Sections
        let count: Int = self.sectionCount(section.section!)

        if (count > 0) {
            let alert = UIAlertController(title: "Confirm Delete", message: "There are \(count) Items using this Section currently. Deleting this Section will reset them all to blank. \n\nThis can't be undone and will take affect immediately!", preferredStyle: UIAlertControllerStyle.Alert)
            let cancel = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel) { UIAlertAction in }
            let deleteAction = UIAlertAction(title: "Delete", style: UIAlertActionStyle.Destructive) { UIAlertAction in
                var blankSection: Sections?

                var fetchReq = NSFetchRequest(entityName: "Sections")
                var pred = NSPredicate(format: "section == %@", "")
                fetchReq.predicate = pred

                do {
                    let results = try self.moc!.executeFetchRequest(fetchReq)
                    blankSection = (results.first as! Sections)
                } catch {
                    fatalError("Fetching blank section failed")
                }

                fetchReq = NSFetchRequest(entityName: "Catalog")
                pred = NSPredicate(format: "sections.section == %@", section.section!)
                fetchReq.predicate = pred

                do {
                    let group = try self.moc!.executeFetchRequest(fetchReq)
                    for rec in group {
                        let catalog: Catalog = rec as! Catalog
                        catalog.sections = blankSection
                    }

                } catch {
                    fatalError("Fetching Items to delete section failed")
                }

                self.moc!.deleteObject(section)

                do {
                    try self.moc!.save()
                } catch {
                    fatalError("Failed to Save after Delete")
                }

                if (self.sectionUpdateProtocol != nil) {
                    self.sectionUpdateProtocol!.sectionUpdate(self, section: blankSection!)
                }

                //self.navigationController!.popViewControllerAnimated(true)
            }

            alert.addAction(deleteAction)
            alert.addAction(cancel)

            self.presentViewController(alert, animated: true, completion: nil)
        } else {
            self.moc!.deleteObject(section)

            do {
                try self.moc!.save()
            } catch {
                fatalError("Failed to Save after Delete")
            }
        }

    }

    return [delete, edit]
}

最佳答案

只需调用:

tableView.setEditing(false, animated: true)   

关于ios - 在 swift 中显示更多按钮时取消在 tableview 单元格上向左滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494914/

相关文章:

swift - "Ambiguous use of ' propertyName '"错误给出了 didSet 观察者覆盖的属性

swift - 使用核心数据的收藏夹按钮

ios - 为 UITableView 部分构建数据结构

Swift - 找出哪个表格 View 单元格占据了大部分屏幕

ios - UIWebView 在关闭其父 View 时重新加载视频

ios - Tableview 不使用 Objective-c 显示 NewsFeed

ios - 是否可以使用 SpriteKit 生成/绘制纹理?

没有本地化应用程序描述的 iOS 应用程序批准?

ios 8 opengl es 1.1 停产了吗?

iphone - 我的新版 iOS 应用程序仅在从应用程序商店加载时才会崩溃