将导航栏项目button设置为新标题

美好的一天。 我正面临一个奇怪的问题,我想设置正确的导航项目在我的下一个select一个行完成。 我试了一下,它的工作。 但是,它破坏了,因为实现doneEditing主体的函数只在下一个视图控制器中,所以任何帮助都会被真正的赞赏。 这是我的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "editContact" { let indexPath = tableView.indexPathForSelectedRow() let destinationVC: NewCategoryViewController = segue.destinationViewController as! NewCategoryViewController let contact:Contact = fetchedResultController.objectAtIndexPath(indexPath!) as! Contact destinationVC.contact = contact var rightAddBarButtonItem:UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneEditing:") destinationVC.navigationItem.rightBarButtonItem = rightAddBarButtonItem } } 

和我的下一个视图控制器是:

 import UIKit import CoreData class NewCategoryViewController: UIViewController { // MARK: - Properties var contact: Contact? = nil // initialize the core data context: let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext // MARK: - Outlets @IBOutlet weak var imageHolder: UIImageView! @IBOutlet weak var nameField: UITextField! @IBOutlet weak var emailField: UITextField! @IBOutlet weak var phoneField: UITextField! @IBOutlet weak var categoryField: UITextField! // MARK: - Actions @IBAction func savebtn(sender: AnyObject) { let entity = NSEntityDescription.entityForName("Contact", inManagedObjectContext: context!) let newContact = Contact(entity: entity!, insertIntoManagedObjectContext: context) newContact.name = nameField.text newContact.email = emailField.text newContact.phone = phoneField.text //newContact.photo = UIImageJPEGRepresentation(imageHolder.image, 1) var error: NSError? context?.save(&error) if let errorSaving = error { var alert = UIAlertController(title: "Alert", message: "Couldn't save contact !!!", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) } else { nameField.text = "" emailField.text = "" phoneField.text = "" var alert = UIAlertController(title: "Notification", message: "Contact added", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) } } override func viewDidLoad() { super.viewDidLoad() self.title = contact?.name if contact != nil { nameField.text = contact?.name emailField.text = contact?.email phoneField.text = contact?.phone } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func doneEditing() { } 

}

将目标从自我更改为目标VC。

用这个:

 var rightAddBarButtonItem:UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: destinationVC, action: "doneEditing:") 

当select器被定义在调用的同一个类中时,应该使用self 。 在这种情况下,select器是在一个单独的类。

要么

我build议你在NewCategoryViewController的viewDidLoad方法中添加正确的barbutton。 在这种情况下,代码将是:

 self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneEditing:") 

执行doneEditing:方法为

 func doneEditing(sender: UIBarButtonItem) { }