ContactsUI: как показать только определенные поля при создании нового контакта на iOS? - PullRequest
0 голосов
/ 04 декабря 2018

Цель состоит в том, чтобы при добавлении нового контакта в iOS отображались только определенные поля.

Например, предположим, что вы хотите показать и изменить только адрес, номер телефона и имя для контакта.

Код ниже не работает.Все поля по-прежнему отображаются.

Перетащите этот контроллер представления в проект, и вы увидите, что все поля контактов по-прежнему представлены, несмотря на использование displayedPropertyKeys.

Как бы вы это сделали?

import Foundation
import Contacts
import ContactsUI


class ContactViewController: UIViewController, CNContactViewControllerDelegate {


    override func viewDidLoad() {
        super.viewDidLoad()
    }


    func createContact() {
        let contactController = CNContactViewController(forNewContact: nil)

        contactController.delegate = self
        contactController.allowsEditing = true
        contactController.allowsActions = true
        contactController.displayedPropertyKeys = [CNContactPostalAddressesKey, CNContactPhoneNumbersKey, CNContactGivenNameKey]

        contactController.view.layoutIfNeeded()

        present(UINavigationController(rootViewController: contactController), animated:true)
    }


    // =============================================================================================================
    // MARK: IB Actions
    // =============================================================================================================
    @IBAction func newContactButtonDidTap(_ sender: UIButton) {
        createContact()
    }


    // =============================================================================================================
    // MARK: UIViewController Functions
    // =============================================================================================================
    override var prefersStatusBarHidden: Bool {
        return true
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

1 Ответ

0 голосов
/ 04 декабря 2018

Позвольте мне прикрепить снимок экрана с объявлением класса CNContactViewController: CNContactViewController

Как вы можете видеть на изображении, там есть @note и написано: ' Все свойства видны при редактировании контакта '.Поэтому я думаю, что при создании контакта рассматривается особый случай редактирования контакта.

Я использую displayedPropertyKeys просто для отображения контакта, и в этом случае работает хорошо.

Надеюсь, это поможет вам!

...