2015-08-02 3 views
2

Я пытаюсь настроить приложение таким образом, чтобы при открытии определенного контакта из ABPeoplePickerNavigationController в ABPersonViewController в правом верхнем углу появилась кнопка редактирования.Swift: Редактировать ABPersonViewController

Я знаю, что вопросы, очень похожие на это, были заданы здесь раньше, но я посмотрел на каждого. Возможно, частично потому, что они были для более старых версий iOS или потому, что большинство из них были в Objective-C или из-за моего собственного невежества, я не смог это обработать.

Вот мой код:

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, shouldContinueAfterSelectingPerson person: ABRecord!) -> Bool { 

    /*let controller = ABPersonViewController() 
    controller.displayedPerson = person 
    controller.allowsEditing = true 
    controller.editing = true 
    controller.personViewDelegate = self 
    peoplePicker.pushViewController(controller, animated: true)*/ 

    let picker = ABNewPersonViewController() 
    picker.newPersonViewDelegate = self 
    picker.displayedPerson = person 
    picker.navigationItem.title = "edit contact" 
    self.navigationController?.pushViewController(picker, animated: true) 

    return false 
} 

Закомментированный код, что я имел, прежде чем я увидел этот вопрос: iOS7 - ABPersonViewController, editing mode

Опять же, все, что я пытаюсь сделать, это добавить кнопку редактирования в верхней так что пользователь имеет вариант для редактирования контакта, но ABPersonViewController должен не открыть в режиме редактирования.

Любая помощь приветствуется, я сожалею, если это утомительно.

ответ

1

Это должно работать:

// iOS 8 and later 
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!) { 
    self.pushViewControllerWithPerson(person) 
} 

// Prior iOS 8 
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, shouldContinueAfterSelectingPerson person: ABRecord!) -> Bool { 
    self.pushViewControllerWithPerson(person) 
    return false 
} 

func pushViewControllerWithPerson(person: ABRecord) { 
    let controller = ABPersonViewController() 
    controller.displayedPerson = person 
    controller.allowsEditing = true 
    controller.personViewDelegate = self 
    self.navigationController?.pushViewController(controller, animated: true) 
} 

Примечание:
peoplePickerNavigationController(peoplePicker:shouldContinueAfterSelectingPerson:) осуждаются в прошивке 8. Так что этот метод не вызываются начиная с этой версии IOS.
peoplePickerNavigationController(peoplePicker:didSelectPerson:) следует использовать вместо этого.

+0

Awesome. Благодарю. Я награжу награду, как только истечет 24-часовой срок. Кроме того, есть ли способ (помимо использования 'ABNewPersonViewController') изменить это, чтобы« ABPersonViewController' _opens_ в режиме редактирования? – 5813

+0

@ 5813, да, это возможно, проверьте этот ответ: http://stackoverflow.com/questions/19099071/ios7-abpersonviewcontroller-editing-mode –

+0

-это, это ответ, который использует 'ABNewPersonViewController'-то, что я был пытаясь избежать, но я рассмотрю его и посмотрю, смогу ли я найти другое решение. – 5813