Affichage du nom des contacts avec adressbook

2

Réponses

  • Joanna CarterJoanna Carter Membre, Modérateur
    mai 2016 modifié #32
    Et tu vas renoncer l'AddressBook en faveur de Contacts ? Si non, pourquoi pas ?
  • J889J889 Membre
    mai 2016 modifié #33

    Que veux tu dire Joanna ?


     


    Pour le problème des contacts qui ne sont pas enregistré en tant que portable, j' ai rajouter :



    - (void)showPicker
    {
    self.textFieldPhone.text = [NSString stringWithFormat:@""];

  • J889J889 Membre
    mai 2016 modifié #34

    Joanna,


     


    Peut-on afficher tous les numéros d' un même contact pour choisir le bon numéro de tel ?


    Je m' explique, lorsque dans mon app le lance le peoplePicker, je ne vois que le nom des contacts et lorsque' on en choisit un, le nom et le numéro de tel s' affiche dans les UITextField.


    Mais pourrait-on, lorsque' on appuie sur le bouton qui recherche quel contact à  appeler, voir tous les numéros de tel enregistrés pour chaque contact comme si au mot de l' enregistrement de ceux-ci on avait fait :


    Marcel Tel principal :0111...

    Marcel Tel Mobile : 0611...


    Marcel Tel Bureau : 0112...


    Isidore Tel principal :0111...

    Isidore Tel Mobile : 0611...


    Isidore Tel Bureau : 0112...


     


    ?


  • J889J889 Membre

    Ou alors plus simple, comment faire pour que lorsqu' on choisit un numéro de tel dans la fiche de contact d' un personne, le téléphone s' affiche dans le textFieldPhone au lieu de lancer l' appelle téléphonique ?


  • Joanna CarterJoanna Carter Membre, Modérateur

    En utilisant Contacts Framework (c'est un cauchemar avec AddressBook) :



    @implementation ViewController

    - (void)showPicker
    {
    self.contactPicker = [[CNContactPickerViewController alloc] init];

    self.contactPicker.predicateForSelectionOfContact = [NSPredicate predicateWithValue:YES];

    NSArray *propertyKeys = @[;CNContactPhoneNumbersKey, CNContactGivenNameKey, CNContactFamilyNameKey, CNContactOrganizationNameKey];

    self.contactPicker.displayedPropertyKeys = propertyKeys;

    NSPredicate *enablePredicate = [NSPredicate predicateWithFormat:@(phoneNumbers.@count > 0)"];

    NSPredicate *contactSelectionPredicate = [NSPredicate predicateWithFormat:@phoneNumbers.@count == 1"];

    self.contactPicker.predicateForEnablingContact = enablePredicate;

    self.contactPicker.predicateForSelectionOfContact = contactSelectionPredicate;


    self.contactPicker.delegate = self;

    [self presentViewController:self.contactPicker animated:YES completion:^
    {

    }];
    }

    - (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact
    {
    NSArray<CNLabeledValue<CNPhoneNumber *> *> *phoneNumbers = contact.phoneNumbers;

    CNLabeledValue<CNPhoneNumber *> *labeledValue = phoneNumbers.firstObject;

    NSString *localisedLabel = [CNLabeledValue<CNPhoneNumber *> localizedStringForLabel:labeledValue.label];

    self.textField.text = [NSString stringWithFormat:@%@ : %@", localisedLabel, labeledValue.value.stringValue];

    [self dismissViewControllerAnimated:YES completion:^
    {
    self.contactPicker = nil;
    }];
    }

    - (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty
    {
    CNPhoneNumber *phoneNumber = (CNPhoneNumber *)contactProperty.value;

    NSString *localisedLabel = [CNLabeledValue<CNPhoneNumber *> localizedStringForLabel:contactProperty.label];

    self.textField.text = [NSString stringWithFormat:@%@ : %@", localisedLabel, phoneNumber.stringValue];

    [self dismissViewControllerAnimated:YES completion:^
    {
    self.contactPicker = nil;
    }];
    }
  • Joanna CarterJoanna Carter Membre, Modérateur
    Facture à  suivre ;)
  • J889J889 Membre

    Oui. Je me disais aussi que je dois me mettre à  Contacts Framework.


  • J889J889 Membre

    Lol :-) Je reconnais que la tu as fait tout le boulot de code :-)


  • J889J889 Membre

    ça marche pas encore. J' ai des warning. Serment dans le .h



    @interface ViewControllerContacts : UIViewController <ABPeoplePickerNavigationControllerDelegate>

    @property (strong, nonatomic) ABPeoplePickerNavigationController *contactPicker;


    qui est mal déclaré pour Contacts Framework.


  • Joanna CarterJoanna Carter Membre, Modérateur
    Mais bien sûr ! Tous qui commencent par AB... appartiennent à  AddressBook. Tu dois les remplacer avec CNContactPickerViewController, CNContactPickerViewControllerDelegate, etc ; comme j'ai écrit dans mon code.


    Je commence à  croire que tu n'as jamais été enseigné en programmation ?
  • Joanna CarterJoanna Carter Membre, Modérateur
    Vidéo sur Contacts Framework de WWDC 2015 Session 223 https://developer.apple.com/videos/play/wwdc2015/223/
  • J889J889 Membre

    Merci Joanna,


    Le code fonctionne mais il met dans le textField ce à  quoi correspond le tel (home, mobile, main) du coup je ne peux pas récupérer les numéros du textField pour passer un appel.



    J' ai un warning comme tu peux le voir dans la pièce jointe. Peux être ça vient de là .


    Mais je t' en ai déjà  beaucoup demandé. C' est très aimable de ta part d' avoir consacré du temps à  me répondre. Je vais essayer de me débrouiller avec tout ce que tu m' as envoyer.


     


    Sinon, effectivement, je n' ai jamais fait de formation de programmation. Mais j' aimerai bien suivre une formation. Voudrais-tu me donner des cours :-) ? Ou les bases de la programmation ?


     


  • Tu ferais bien de reprendre à  zéro, et laisser tomber l'Obj-C pour passer à  Swift. Pour commencer, jette un oeil sur les tutoriels vidéo de ma signature. 

  • J889J889 Membre

    D' accord Draken. Je vais faire ça. Merci.


  • Joanna CarterJoanna Carter Membre, Modérateur


    Merci Joanna,


    Le code fonctionne mais il met dans le textField ce à  quoi correspond le tel (home, mobile, main) du coup je ne peux pas récupérer les numéros du textField pour passer un appel.




     


    Tu ne devrais pas récupérer les numéros du textField, le numéro en NSString se trouve dans le stringValue d'un CNPhoneNumber ou dans le value.stringValue d'un CNLabeledValue<CNPhoneNumber *>. Il ne faut que le passer comme URL.


     




    J' ai un warning comme tu peux le voir dans la pièce jointe. Peux être ça vient de là .




     


    ça n'a rien à  voir avec le warning. C'est parce que tu n'as pas ajouté le bon protocole à  ta classe de ViewController.



    @interface ViewController () <CNContactPickerDelegate>

    @property (strong, nonatomic) CNContactPickerViewController *contactPicker;

    @property (weak, nonatomic) IBOutlet UITextField *textField;

    - (IBAction)showPicker;

    @end



    Sinon, effectivement, je n' ai jamais fait de formation de programmation. Mais j' aimerai bien suivre une formation. Voudrais-tu me donner des cours :-) ? Ou les bases de la programmation ?




     


    Si tu voulais, je peux t'enseigner sur place mais ça te couterait. Sinon, je te conseille de suivre les cours de Stanford University ; mais, peut-être, tu manqueras les compétences de base pour le comprendre.


     


    Quand même, comme disait Draken, tu profiterais mieux de recommencer avec Swift que rester avec Objective-C.

  • J889J889 Membre

    Oui Joanna. Tu as raison. Je les ai récupéré directement du labeledValue.value.stringValue et du phoneNumber.stringValue.


    J' ai corrigé le protocole et mis le bon.


     


    SI j' habitais en Europe je pense que je t' ' aurai quand même contacté pour quelque cours. Au moins la base. C' est toujours plus facile d' avoir une personne en face de soi pour apprendre.


    Merci pour tes conseils. Je vais voir les cours de Stanford University et les cours en vidéo dont Draken parlait.


    Et me mettre au swift :-)




  • SI j' habitais en Europe je pense que je t' ' aurai quand même contacté pour quelque cours. Au moins la base. C' est toujours plus facile d' avoir une personne en face de soi pour apprendre.


     


     




    Attention c'est un développeur professionnel avec des tarifs non négligeable. Sinon, elle n'est peut-être pas européenne. Joanna t'es européenne ? Plus que 24 jours avant de te décider, non ?

  • J889J889 Membre
    mai 2016 modifié #49

    Je me doute que ce n' est donné mais c' est une formation. Tout aurait dépendu des tarifs bien sûr :-)


    Je n' ai pas voulu offensé qui que se soit en disant ça.


    J' ai vu que Joanna est en angleterre il me semble.


    Mais draken, que veux tu dire par les 24 jours ?


  • Joanna est anglaise. Le 24 Juin, dans 3 semaines, le gouvernement anglais organise un référendum pour savoir si la grande-bretagne doit quitter l'Union Européenne. Chaque citoyen anglais(e) devras voter pour savoir s'il/elle se considère comme européen ou simplement anglais.

  • J889J889 Membre

    Ah d' accord Draken :-)


  • Joanna CarterJoanna Carter Membre, Modérateur
    mai 2016 modifié #52


    Attention c'est un développeur professionnel avec des tarifs non négligeable


    Avec 24 ans d'expérience, comme consultante, architecte et developpeuse, il vaut le coût :)


    Sinon, elle n'est peut-être pas européenne. Joanna t'es européenne ? Plus que 24 jours avant de te décider, non ?


    J'ai déjà  décidé. Mardi prochain, je quitte l'Angleterre, pour m'installer définitivement en France. Dès le 10 juin je serai bretonne ;)
  • Bretonne de la petite, mais avec un passeport de la grande .. Pourquoi la Bretagne au fait ? Par amour de la pluie ? Tu ne peux pas vivre sans 250 jours de pluie ? Le bas de la France est tellement plus ensoleillé. 

  • Joanna CarterJoanna Carter Membre, Modérateur


    Bretonne de la petite, mais avec un passeport de la grande 




     


    Bah ouais, mais avec une mère avec un nom de jeune fille (Trigance) que l'on puisse tracer à  la ville du même nom dans le Var ...  8--)


     




    Pourquoi la Bretagne au fait ? Par amour de la pluie ? Tu ne peux pas vivre sans 250 jours de pluie ? Le bas de la France est tellement plus ensoleillé. 




     


    J'ai travaillé sur Aix-en-Provence et, même pendant le printemps, il faisait trop chaud pour moi. Quand même, il faut de la pluie pour pousser les bons artichauts ; et les pommes pour les meilleurs cidres 



  • Bah ouais, mais avec une mère avec un nom de jeune fille (Trigance) que l'on puisse tracer à  la ville du même nom dans le Var ...  8--)




    T'es pas une vraie anglaise alors, avec ton 1/4 de sang français. Ouf t'es sauvé.


    Moi j'ai un 1/4 de sang en provenance d'un pays peuplé de terroristes basanés. C'est pas mieux.

  • J889J889 Membre

    J' ai habité prés d' Aix en Provence :-)


  • J889J889 Membre

    ça fait une semaine que je cherche...


    J' ai toujours une erreur à  cette ligne :



    NSArray *propertyKeys = @[;CNContactPhoneNumbersKey, CNContactGivenNameKey, CNContactFamilyNameKey, CNContactOrganizationNameKey];

    mais uniquement lorsque je teste sur iPhone 4s.


  • CéroceCéroce Membre, Modérateur
    Quelle erreur exactement?
  • J889J889 Membre

    L' application se bloque dés que j' appuie sur le bouton qui lance l' application contact uniquement sur iPhone 4s.


     


  • Ton iPhone 4S est bien sous iOS9 ?




  • Ton iPhone 4S est bien sous iOS9 ?




     


    +1

Connectez-vous ou Inscrivez-vous pour répondre.