2015-09-23 2 views
1

Добрый день. Я столкнулся с какой-то странной проблемой, я бы хотел установить правильный элемент навигации для Done в следующем, когда я выбрал строку. Я попробовал, и это сработало. Но это ломается, потому что функция, которая реализует тело 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() { 

} 

}

ответ

1

цель изменения от себя к destinationVC.

Используется:

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

self следует использовать, если селектор определен в том же классе, что делает вызов. В этом случае селектор находится в отдельном классе.

ИЛИ

Я хотел бы предложить вам добавить правую кнопку бар в методе viewDidLoad из NewCategoryViewController. В этом случае код будет:

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

И осуществить doneEditing: Способ по

func doneEditing(sender: UIBarButtonItem) { 

} 
+0

У меня эта ошибка: непризнанная селектор отправляется например 0x19268c80 2015-09-23 15: 50: 32.013 My People [1635: 1036672] *** Завершение приложения из-за неотображенного исключения «NSInvalidArgumentException», причина: '- [My_People.NewCategoryViewController doneEditing:]: непризнанный селектор, отправленный экземпляру 0x19268c80' *** Первый стек вызовов броска : –

+0

Я использую тот же viewcontroller для добавления и редактирования контакта. Вот почему я делаю в этом в segue, потому что, когда я добавляю, кнопка будет добавлена, но когда я выберем имя из таблицы, кнопка должна будет измениться на выполненную. –

+0

См. Мой обновленный ответ –

Смежные вопросы