© 2013 All rights reserved.
0

iPhone – Access to AdressBook

Vytvoříme si jednoduchou aplikaci, která bude umožňovat přístup k telefonnímu seznamu telefnu a dokáže z něj načíst informace o vybraných kontaktech.

Aplikace bude umožňovat vybrat několik kontaktů, pro jejich vybrání se využije aktuální seznam z telefonu, a vybrané hodnoty se zobrazí v tabulce v aplikaci.

 

Přístup k telefonnímu seznamu v iPhone není nic složitého. Využijeme přímo součást frameworku Cocoa AddressBook, která nám práci s telefonním seznamem telefonu velmi usnadní.

Vytvoření aplikace

Jako první si vytvoříme novou aplikaci, můžeme ji nazvat například SimpleAdressBook (i když se ve výsledku nejedná o adresář, ale spíše jenom o ukázu přístupu k adresáři).

Aplikaci vytvoříme jako standartní View-based application:



adress book

Vytvoření interface

Interface celé aplikace si vytvoříme například v Interface Builderu, kde tohle bude otázkou několika málo minut.

Nejprve si ovšem doplníme potřebné proměnné do hlavičkového souboru aplikace (v tomto případě to bude SimpleAdressBookViewController.h)

Vytvořili jsme si jedno tlačítko – UIButton (bude vyvolávat akci pro výběr kontaktu), jeden UILabel (bude soužit pouze jako informační hodnota) a jeden UIView, do kterého budeme hodnoty zapisovat.

K tlačítku samozřejmě vytvoříme IBAction – v tomto případě jsme ji nazvali addContact.

Design s navázanými hodnotami může vypadat například následně:



adress book

Navíc navážeme událost na tlačítko (použijeme Touch UP Inside):



adress book

AdressBook

Abychom mohli využívat AdressBook z Cocoa, musíme si jej přidat do projektu. To uděláme jednoudše přes tlačítko Get Info v Targets projektu (proklik přes naši aplikaci):



adress book

V levém dolním rohu vidíme tlačítko + přes které si do projektu přídáme:

  • AdressBook.framework
  • AdressBookUI.framework



adress book

V případě že jsou knihovny správně přídány do projektu, můžeme je includovat, to provedeme v hlavičkovém souboru SimpleAdressBookViewController.h, který bude vypadat následovně:

Implementace

Nyní je vše připraveno a můžeme se pustit do implementace.

 

Do projektu si přídáme několik konstant, které budeme v průběhu běhu potřebovat:

  • lineHeight – výška jednoho řádku pro výpis kontaktu
  • lineStart – pozice prvního řádku ve výpisu
  • columnWidth – výška řádku s výpisem kontaktu
  • count – aktuální počet vybraných kontaktů
  • maxCount – maximální počet vybraných kontaktů

 

Připravíme si funkci, která nám bude vracet aktální pozici pro výpis řádku s hodnotou:

Funkce vrací pozici, která se vypočítá podle aktuálního počtu řádek.

 

Dále si připravíme funkci, která upraví popisek v UILabelu a zapíše sem aktální počet vybraných kontaktů:

Funkci rovnou spustíme při načtení aplikace ve funkci viewDidLoad:

 

Konečně si můžeme dopsat událost addContact, která se bude spouštět při kliknutí na tlačítko:

Funkce nejprve zkontroluje, zda počet vybraných kontaktů je menší než maximální množství, pokud ne, bude nás o tom informovat v podobě UIAlertu.

Pokud je vše vpořádku, inicializuje ABPeoplePickerNavigationController a zobrazí kontakty.

 

Na tomto místě máme přepnut screen do kontaktů telefonu – nyní mohou nastat dva případy:

  • Uživatel klikne na konkakt a tím jej vybere
  • Uživatel klikne na tlačítko Cancel

 

Pro ošetření tlačítka Cancel dopíšeme funkci peoplePickerNavigationControllerDidCancel, která se v tomto případě bude volat:

Funkce se vrátí zpět do načí aplikace a skryje adresář kontaktů

 

Druhá možnost, kdy uživatel vybere kontakt, je konečně ta, kterou očekáváme a pro kterou si přetížíme funkci peoplePickerNavigationController, jež se bude v tomto případě volat

Co nás nejvíce zajímá je vstupní proměnná person, ze které budeme zjišťovat všechny informace.

Pro naše potřeby budeme potřebovat zjistit:

  • Jméno
  • Příjmení
  • Email
  • Telefonní číslo

Nejjednodušší je zjištění jména a příjmení, to můžeme udělat přímo:

V případě dalších hodnot, jako je telefon a email, musíme myslet na to, že jich může být v iPhone uloženo více než jedna hodnota, z proměnné person takto dostaneme hodnotu typu ABMultiValueRef:

Dopíšeme si funkci, která nám z ABMultiValueRef vrátí pouze jednu hodnotu:

Nyní můžeme v peoplePickerNavigationController volat:

Pokud bude v kontaktu uložen email nebo telefonní číslo, uloží se nám do proměnné.

 

Tím máme zjištěny všechny potřebné hodnoty a můžeme se vrátit zpět z Konktatů

 

V poslední části musíme kontakt vypsat do obrazovky, uděláme si na to funkci addColumn, která bude vytažené hodnoty vykreslovat do tří sloupců:

Vstupní parametry jsou číslo sloupce (indexovány od 0) a hodnota, kterou má na daný sloupec vypsat (doplníme do funkce peoplePickerNavigationController):

Nakonec inkrementujeme hodnotu proměnné count a voláme funkci updateCountLabel

Shrnutí implementace

Ještě jednou si uvedeme celou implementaci SimpleAdressBookViewController:

Výsledek

Výsledná aplikace tedy umožní přes tlačítko vybrat konktaty ze seznamu kontaktů a tyto kontakty zobrazit, jak bylo uvedeno na začátku:



adress book

 

adress book



adress book

 

adress book

Comments are closed for this page

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836