好的,我发布了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()
}
我缺少什么?谢谢你们。