在swift

时间:2016-05-28 03:32:08

标签: ios swift uitableview

我想知道是否有一种正确的方法来取消在tableview单元格上留下的滑动,以便它向后滑动以隐藏按钮。我真的不确定如何正确地说出来,哈哈。但请参阅下面的GIF。在第一个GIF中,按下取消按钮后没有代码,按钮保持可见。

enter image description here

我唯一的想法就是用这段代码self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)重新加载单元格但是这样可以看出按钮向上移动,而我更喜欢它看起来像是单元格移位到了对。请参阅下面的重新加载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]
}

1 个答案:

答案 0 :(得分:8)

请致电:

tableView.setEditing(false, animated: true)