无法获取用于集合的deleteItemAtIndexPath查看单元格是否正常工作。迅速

时间:2015-11-24 23:04:13

标签: ios swift uicollectionview uicollectionviewcell

好的,我发布了3x的问题,由于某种原因,到目前为止没有任何解决方案有帮助。我无法使collectionView.deleteItemsAtIndexPath工作......

一切似乎都很好。当我点击我的deleteButton它实际上没有删除该项目。

我已经在这3天了。请告诉我我错过了什么:)

这是我的代码:

import UIKit

protocol AddNewTrainerViewControllerDelegate: class {

    func addNewTrainerViewControllerDidCancel(controller: AddNewTrainerViewController)
    func addNewTrainerViewController(controller: AddNewTrainerViewController, didFinishAddingItem item: TrainerArray)
    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
    func addNewTrainerViewController(controller: AddNewTrainerViewController, didFinishEditingItem trainer: TrainerArray)
    func addNewTrainerViewController(controller: AddNewTrainerViewController, didFinishDeletingItem item:TrainerArray)


}



class AddNewTrainerViewController: UITableViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    @IBAction func openPhotoLibrary(sender: AnyObject) {

        var photoPicker = UIImagePickerController()
        photoPicker.delegate = self
        photoPicker.sourceType = .PhotoLibrary
        photoPicker.allowsEditing = true 
        self.presentViewController(photoPicker, animated: true, completion: nil)
    }

    @IBOutlet weak var trainerPhoto: UIImageView!

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {

        trainerPhoto.image = info[UIImagePickerControllerOriginalImage] as? UIImage
        self.dismissViewControllerAnimated(false, completion: nil)

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        if let trainer = trainerToEdit {

            title = "Edit Trainer"
            textField.text = trainer.name
            trainerPhoto.image = trainer.trainerImage
            doneBarButton.enabled = true


            let deleteButton = UIBarButtonItem(barButtonSystemItem: .Trash, target: self, action: "deleteButton")
            navigationItem.leftBarButtonItem = deleteButton
        }
    }

    func deleteButton() {

        let item = TrainerArray()
        delegate?.addNewTrainerViewController(self, didFinishDeletingItem: item)


    }


    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        textField.becomeFirstResponder()
    }

    //outlet for done bar button item to control status
    @IBOutlet weak var doneBarButton: UIBarButtonItem!

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

        let oldText: NSString = textField.text!
        let newText: NSString = oldText.stringByReplacingCharactersInRange(range, withString: string)
        if newText.length > 3 {
            doneBarButton.enabled = true
        } else {
            doneBarButton.enabled = false
        }

       return true
    }


    //Trainer Name Text Field
    @IBOutlet weak var textField: UITextField!

    //action outlet for done button
    @IBAction func doneButton(sender: UIBarButtonItem) {

        if let trainer = trainerToEdit {

            trainer.name = textField.text!
            trainer.trainerImage = trainerPhoto.image!
            delegate?.addNewTrainerViewController(self, didFinishEditingItem: trainer)

        } else if trainerPhoto.image == nil {
            displayAlert("Please Add Your Trainer's Photo", message: "")

        } else if trainerPhoto.image != nil {

        let item = TrainerArray()
        item.name = textField.text!
        item.trainerImage = trainerPhoto.image!
        delegate?.addNewTrainerViewController(self, didFinishAddingItem: item)

        }

    }


    //action outlet for cancel or back button
    @IBAction func cancelButton(sender: UIBarButtonItem) {

        delegate?.addNewTrainerViewControllerDidCancel(self)
    }

    // doesn't allow selection of the row. Won't turn gray.
    override func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {

        return nil
    }

    weak var delegate: AddNewTrainerViewControllerDelegate?


    func displayAlert (title: String, message: String) {

        var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
        alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
        self.presentViewController(alert, animated: true, completion: nil)


    }

    var trainerToEdit: TrainerArray?


    }

这是我在另一个视图控制器中调用的协议方法。记住委托工作,因为我能够添加和编辑项目..删除是问题。

         func addNewTrainerViewController(controller: AddNewTrainerViewController, didFinishDeletingItem item: TrainerArray) {

        if let index = trainers.indexOf(item) {

            let indexPath = NSIndexPath(forRow: index, inSection: 0)
            let indexPaths = [indexPath]
            if let cell = collectionView.cellForItemAtIndexPath(indexPath){

                configureTrainerForCell(cell, withTrainerArray: item)
                self.collectionView.deleteItemsAtIndexPaths(indexPaths)

            }
        }
            dismissViewControllerAnimated(true, completion: nil)
            saveTrainerItems()
    }

我缺少什么?谢谢你们。

0 个答案:

没有答案