繁体   English   中英

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

[英]Cancel swipe left on tableview cell when showing more buttons in swift

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

在此处输入图片说明

我唯一的想法是使用此代码重新加载单元格self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)但这给出了按钮向上移动的外观,而我更喜欢它出现单元格向右移动回到原位。 请参阅下面的重新加载 GIF。

在此处输入图片说明

我应该如何正确地做到这一点? 请参阅下面的我添加按钮及其功能的代码。

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)   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM