iOS 5
Podręcznik programisty
iOS to jeden z najpopularniejszych systemów operacyjnych wykorzystywanych w
urządzeniach mobilnych. Znajdziesz go we wszystkich sprzętach Apple — iPhone’ach,
iPadach i iPodach. Różnorodność urządzeń gwarantuje Ci dużą liczbę
użytkowników, ale z drugiej strony dostarcza wielu nowych wyzwań. Zastanawiasz się,
jak poradzić sobie z codziennymi problemami, pojawiającymi się w trakcie tworzenia
aplikacji dla iOS?
W tej książce Erica Sadun - autorka bestsellerów i guru programowania na
platformie iOS - umieściła wszystkie informacje potrzebne do tego, abyś jak najszybciej
zaczął tworzyć znakomite aplikacje dla urządzeń mobilnych na iOS 5.
Znajdziesz tu gotowy do natychmiastowego użycia i łatwy w rozbudowie kod źródłowy,
co pozwoli Ci uniknąć konieczności szukania własnych rozwiązań metodą prób i
błędów. Przykłady przygotowane i przetestowane przez autorkę dotyczą praktycznie
każdej dziedziny programowania na platformie iOS, od tworzenia interfejsu użytkownika,
poprzez kontrolery widoku, gesty i dotknięcia, aż do obsługi sieci oraz kwestii
bezpieczeństwa.
Opanowanie iOS 5 SDK, podstaw języka programowania Objective-C oraz cyklu
życiowego tworzenia oprogramowania na platformie iOS
Projektowanie i dostosowanie do własnych potrzeb interfejsu użytkownika przy
użyciu modułu Interface Builder i języka Objective-C
Organizowanie aplikacji za pomocą kontrolerów widoku, widoków i animacji, w tym
najnowszego kontrolera widoku strony oraz własnych kontenerów
Maksymalne wykorzystanie dotknięć i gestów oraz tworzenie własnych procedur
rozpoznawania gestów
Tworzenie od podstaw i używanie kontrolek
Praca z technologiami Core Image i Core Text
Implementacja w pełni wyposażonych widoków tabel, włącznie z edycją komórek,
zmianą ich kolejności oraz stosowaniem własnych komórek
Tworzenie magazynów zarządzanych danych, dodawanie, usuwanie, pobieranie i
wyświetlanie danych
Wyświetlanie komunikatów dla użytkownika w postaci okien dialogowych, pasków
postępu, powiadomień lokalnych i typu push, okien typu Popover oraz polecenia ping
Żądanie i obsługa informacji pochodzących od użytkowników
Nawiązywanie połączenia z sieciami i usługami, obsługa uwierzytelniania oraz
zarządzanie pobieraniem danych
Instalacja aplikacji w urządzeniach iOS, przekazywanie aplikacji testerom wersji
beta oraz do sklepu iTunes App Store
Spis treści:
Podziękowania (21)
O autorce (22)
Wstęp (23)
1. Wprowadzenie do iOS SDK (33)
- Programy twórców iOS (33)
- Online Developer Program (33)
- Standard Developer Program (34)
- Developer Enterprise Program (35)
- Developer University Program (35)
- Rejestracja (35)
- Rozpoczęcie pracy (35)
- Pobieranie SDK (36)
- Urządzenia do tworzenia aplikacji (37)
- Ograniczenia symulatora (38)
- Podłączenie urządzenia do komputera (40)
- Różnice pomiędzy modelami (41)
- Wymiary ekranu (41)
- Kamera (42)
- Dźwięk (42)
- Telefonia (43)
- Różnice związane z Core Location i Core Motion (43)
- Obsługa wibracji i zbliżenia (44)
- Szybkości procesorów (44)
- OpenGL ES (44)
- Ograniczenia platformy (45)
- Ograniczenia przestrzeni na dane (45)
- Ograniczenia dostępu do danych (45)
- Ograniczenia pamięci (46)
- Ograniczenia interakcji (50)
- Ograniczenia energetyczne (50)
- Ograniczenia aplikacji (51)
- Ograniczenia możliwości działań użytkownika (52)
- Ograniczenia SDK (52)
- Korzystanie z serwisu Provisioning Portal (53)
- Zdefiniowanie zespołu (54)
- Uzyskiwanie certyfikatów (54)
- Rejestrowanie urządzeń (55)
- Rejestrowanie identyfikatorów aplikacji (56)
- Akredytacja (57)
- Składanie projektów iPhone w całość (58)
- Szkielet aplikacji iPhone (60)
- main.m (61)
- Delegat aplikacji (63)
- Kontroler widoku (65)
- Uwaga na temat przykładowego kodu prezentowanego w tej książce (66)
- Komponenty aplikacji iOS (67)
- Hierarchia katalogów aplikacji (67)
- Plik wykonywalny (67)
- Plik Info.plist (68)
- Ikona i obrazy rozruchowe (69)
- Pliki narzędzia Interface Builder (72)
- Pliki nienależące do paczki aplikacji (72)
- Archiwa IPA (73)
- Piaskownice (74)
- Paradygmaty programowania (74)
- Programowanie zorientowane obiektowo (75)
- Model-widok-kontroler (75)
- Podsumowanie (83)
2. Obóz treningowy Objective-C (85)
- Język programowania Objective-C (85)
- Klasy i obiekty (86)
- Tworzenie obiektów (88)
- Alokacja pamięci (88)
- Zwalnianie pamięci (89)
- Licznik użycia obiektu (90)
- Metody, wiadomości i selektory (90)
- Niezadeklarowane metody (91)
- Wskaźnik do obiektu (92)
- Dziedziczenie metod (93)
- Deklarowanie metod (93)
- Implementacja metody (93)
- Metody klasy (95)
- Szybkie wyliczenie (96)
- Hierarchia klas (97)
- Wyświetlanie informacji (98)
- Podstawy zarządzania pamięcią (100)
- Zarządzanie pamięcią poprzez MRR (100)
- Zarządzanie pamięcią za pomocą technologii ARC (103)
- Właściwości (104)
- Hermetyzacja (105)
- Zapis z użyciem kropki (105)
- Właściwości i zarządzanie pamięcią (105)
- Deklaracja właściwości (106)
- Tworzenie własnych metod typu getter i setter (108)
- Kwalifikatory właściwości (110)
- Funkcja KVC (111)
- Funkcja KVO (112)
- Technologia MRR i duża wartość licznika użycia (112)
- Inne sposoby tworzenia obiektów (113)
- Usuwanie obiektu z pamięci (114)
- Używanie bloków (117)
- Definiowanie bloku w kodzie (118)
- Przypisywanie odniesień do bloku (119)
- Blok i zmienne lokalne (120)
- Blok i typedef (120)
- Bloki i zarządzanie pamięcią w technologii MRR (121)
- Inne użycie bloków (121)
- Technologia ARC (121)
- Kwalifikatory właściwości i zmiennych (122)
- Licznik odniesień (125)
- Pula zwalniana automatycznie (127)
- Stosowanie technologii ARC - za i przeciw (128)
- Migracja do ARC (128)
- Wyłączenie ARC w projekcie (129)
- Wyłączenie ARC dla poszczególnych plików (130)
- Utworzenie projektu niezgodnego z ARC na bazie szablonu w Xcode (130)
- Reguły dotyczące ARC (131)
- Użycie technologii ARC wraz z Core Foundation i rzutowaniem typów danych (132)
- Rzutowanie pomiędzy Objective-C i Core Foundation (132)
- Wybór odpowiedniego podejścia (134)
- Rozwiązania stosowane w trakcie działania aplikacji (134)
- Wskazówki i podpowiedzi dotyczące pracy z ARC (135)
- Wzorzec Singleton (136)
- Kategorie (rozszerzenia klas) (137)
- Protokoły (138)
- Definiowanie protokołu (138)
- Stosowanie protokołu (139)
- Dodanie wywołań zwrotnych (139)
- Deklaracja opcjonalnych wywołań zwrotnych (140)
- Implementacja opcjonalnych wywołań zwrotnych (140)
- Zgodność z protokołem (141)
- Klasy Foundation (142)
- Ciągi tekstowe (142)
- Liczby i daty (147)
- Kolekcje (149)
- I jeszcze jedno: przekazywanie wiadomości (154)
- Implementacja przekazywania wiadomości (155)
- Operacje czyszczące (156)
- Superłatwe przekazywanie (157.)
- Podsumowanie (157)
3. Budowanie pierwszego projektu (159)
- Utworzenie nowego projektu (159)
- Utworzenie aplikacji na podstawie szablonu (161)
- Utworzenie nowego projektu (161)
- Wprowadzenie do przestrzeni roboczej Xcode (164)
- Przegląd projektu (169)
- Otwórz plik Storyboard dla iPhone'a (170)
- Edycja widoku (171)
- Uruchomienie aplikacji (173)
- Używanie symulatora (174)
- Symulator - co się dzieje w tle? (175)
- Współdzielenie aplikacji symulatora (177)
- Minimalistyczna wersja aplikacji typu Witaj, świecie (178)
- Przeglądanie API SDK (180)
- Konwersja plików modułu Interface Builder na ich odpowiedniki w Objective-C (181)
- Używanie modułu usuwania błędów (183)
- Ustawienie punktu kontrolnego (184)
- Wyświetlenie panelu modułu usuwania błędów (185)
- Analiza etykiety (186)
- Ustawienie innego punktu kontrolnego (187)
- Śledzenie wsteczne (188)
- Konsola (188)
- Dodanie prostego śledzenia (188)
- Zarządzanie pamięcią (189)
- Sposób: użycie narzędzia Instruments do wykrywania wycieków pamięci (190)
- Sposób: użycie narzędzia Instruments do monitorowania alokacji buforowanych obiektów
(192)
- Symulacja sytuacji, gdy w systemie pozostało niewiele wolnej pamięci (193)
- Analiza kodu (195)
- Od Xcode do urządzenia - interfejs okna Organizer (196)
- Urządzenia (197)
- Informacje ogólne (197)
- Profile akredytacyjne (197)
- Dzienniki zdarzeń w urządzeniu (197)
- Aplikacje (199)
- Konsola (199)
- Zrzuty ekranu (199)
- Kompilacja dla urządzenia iOS (200)
- Używanie profilu akredytacyjnego programisty (200)
- Dodanie urządzenia, w którym można uruchamiać tworzone aplikacje (201)
- Przeanalizuj identyfikator aplikacji (201)
- Ustawienie urządzenia i tożsamości podpisywania kodu (202)
- Określenie bazowej wersji SDK dla aplikacji (203)
- Kompilacja i uruchomienie aplikacji Hello World (204)
- Podpisywanie skompilowanych aplikacji (205)
- Wykrywanie platformy docelowej podczas kompilacji (205)
- Sprawdzanie zgodności podczas działania aplikacji (205)
- Znaczniki pragma mark (207)
- Ukrywanie treści metod (208)
- Przygotowanie do dystrybucji (208)
- Odszukanie i oczyszczenie aplikacji (208)
- Używanie schematów i akcji (209)
- Dodanie własnej konfiguracji kompilacji aplikacji (210)
- Informacje dotyczące dystrybucji tymczasowej (211)
- Tworzenie pakietu w konfiguracji tymczasowej (212)
- Dystrybucja tymczasowa OTA (213)
- Utworzenie pliku manifestu (213)
- Zgłoszenie aplikacji do iTunes App Store (215)
- Podsumowanie (217)
4. Projektowanie interfejsu użytkownika (219)
- Klasy UIView i UIWindow (219)
- Widoki wyświetlające dane (220)
- Widok przeznaczony do dokonania wyboru (221)
- Kontrolki (222)
- Tabele i kontrolki typu Picker (223)
- Paski (223)
- Pasek postępu i wskaźnik wykonywania operacji (224)
- Kontroler widoku (224)
- Klasa UIViewController (225)
- Klasa UINavigationController (225)
- Klasa UITabBarController (226)
- Kontroler widoku podzielonego (226)
- Kontroler widoku strony (227)
- Kontroler typu Popover (227)
- Kontroler widoku tabeli (227)
- Kontroler książki adresowej (228)
- Klasa UIImagePicker (228)
- Tworzenie wiadomości e-mail (228)
- Klasa UIDocumentInteractionController (229)
- Klasa GKPeerPickerController (229)
- Kontrolery odtwarzania treści multimedialnej (229)
- Geometria widoku (229)
- Pasek stanu (230)
- Paski nawigacyjny, narzędziowy i kart (231)
- Klawiatura i kontrolki Picker (233)
- Pole tekstowe (233)
- Klasa UIScreen (234)
- Tworzenie interfejsu (235)
- Użycie funkcji Storyboard do utworzenia interfejsu użytkownika (235)
- Utworzenie nowego projektu (236)
- Dodanie kolejnych kontrolerów widoku (236)
- Organizacja widoków (237)
- Uaktualnienie klas (238)
- Nazwy scen (238)
- Edycja atrybutów widoku (239)
- Dodanie przycisków nawigacyjnych (239)
- Dodanie kolejnego kontrolera nawigacyjnego (241)
- Nadawanie nazw kontrolerom (241)
- Pokolorowanie pasków nawigacyjnych (241)
- Dodanie przycisku (242)
- Zmiana początkowo wyświetlanego kontrolera (242)
- Dodanie kodu usuwającego widok z ekranu (242)
- Uruchomienie aplikacji (243)
- Użycie okien typu Popover (243)
- Dodanie kontrolera nawigacyjnego (244)
- Zmiana klasy kontrolera widoku (244)
- Dostosowanie do własnych potrzeb widoku okna Popover (245)
- Utworzenie połączeń (245)
- Edycja kodu (245)
- Użycie modułu Interface Builder do utworzenia konwertera temperatur (247)
- Utworzenie nowego projektu (247)
- Dodanie plików (247)
- Interface Builder (248)
- Dodanie etykiet i widoków (249)
- Włączenie zmiany orientacji (249)
- Test interfejsu (249)
- Dodanie outletów i akcji (249)
- Dodanie metody konwersji (251)
- Uaktualnienie rodzaju klawiatury (251)
- Połączenie interfejsu iPada (252)
- Ręczna budowa interfejsu aplikacji konwertera (253)
- Połączenie wszystkiego razem (255)
- Tworzenie, wczytywanie i używanie interfejsów hybrydowych (256)
- Utworzenie nowego pliku .xib przeznaczonego na interfejs użytkownika (256)
- Dodanie widoku i wypełnienie go treścią (257)
- Nadanie wartości tag widokom (257)
- Edycja kodu (257)
- Projektowanie w celu zapewnienia obrotu interfejsu (258)
- Włączenie zmiany układu (258)
- Automatyczna zmiana wielkości (261)
- Przykład automatycznej zmiany wielkości (262)
- Omówienie opcji automatycznej zmiany wielkości (264)
- Przenoszenie widoków (264)
- Sposób: przenoszenie widoków poprzez naśladowanie szablonów (265)
- I jeszcze jedno: kilka doskonałych podpowiedzi dotyczących modułu Interface Builder
(268)
- Podsumowanie (270)
5. Praca z kontrolerem widoku (271)
- Praca z kontrolerem nawigacyjnym i widokiem podzielonym (271)
- Używanie stosów i kontrolerów nawigacyjnych (273)
- Umieszczanie i usuwanie kontrolera ze stosu (273)
- Klasa elementu nawigacyjnego (274)
- Kontroler modalny (275)
- Sposób: budowa prostego menu składającego się z dwóch elementów (275)
- Sposób: dodanie kontrolki segmentowanej (277)
- Sposób: nawigacja pomiędzy kontrolerami widoków (279)
- Sposób: wyświetlenie własnego widoku modalnego zawierającego informacje (281)
- Sposób: kontroler widoku strony (285)
- Właściwości książki (285)
- Opakowanie implementacji (286)
- Omówienie kodu sposobu (290)
- Sposób: przewijanie stron w kontrolerze widoku strony (291)
- Sposób: pasek kart (292)
- Sposób: zapamiętanie stanu paska kart (295)
- Sposób: utworzenie kontrolera widoku podzielonego (298)
- Sposób: utworzenie aplikacji uniwersalnej używającej widoku podzielonego (302)
- Sposób: własny pojemnik i przejście segue (304)
- Przejścia pomiędzy kontrolerami widoków (308)
- I jeszcze jedno: moduł Interface Builder i kontroler paska kart (309)
- Podsumowanie (310)
6. Tworzenie widoków i animacji (313)
- Hierarchia widoku (313)
- Sposób: odkrywanie drzewa hierarchii widoku (315)
- Sposób: wykonywanie zapytań do podwidoków (315)
- Zarządzanie podwidokami (317)
- Dodanie podwidoku (317)
- Zmiana kolejności i usuwanie podwidoków (318)
- Wywołania zwrotne widoku (318)
- Sposób: oznaczanie widoków wartościami tag oraz pobieranie widoków (319)
- Używanie wartości tag do wyszukiwania widoków (319)
- Sposób: nadawanie nazw widokom (321)
- Obiekty powiązane (321)
- Użycie słownika nazw (323)
- Geometria widoku (326)
- Ramka (326)
- Przekształcenia (327)
- Systemy współrzędnych (328)
- Sposób: praca z ramką widoku (328)
- Dostosowanie wielkości (329)
- Struktura CGRect i punkt środkowy (330)
- Inne metody narzędziowe (331)
- Sposób: losowe przeniesienie widoku (334)
- Sposób: przekształcenie widoku (336)
- Wyświetlacz i cechy interakcji (337)
- Animacje obiektu UIView (338)
- Transakcyjne tworzenie animacji UIView (338)
- Tworzenie animacji za pomocą bloku (340)
- Animacja warunkowa (340)
- Sposób: pojawianie się i znikanie widoku (341)
- Sposób: zamiana widoków (342)
- Sposób: obrót widoku (343)
- Sposób: używanie przejść Core Animation (343)
- Sposób: efekt odbicia pojawiającego się widoku (345)
- Sposób: animacja widoku obrazu (346)
- I jeszcze jedno: dodanie odbicia do widoku (347)
- Podsumowanie (349)
7. Praca z obrazami (351)
- Wyszukiwanie i wczytywanie obrazów (351)
- Odczyt danych obrazu (353)
- Sposób: uzyskanie dostępu do zdjęć z albumu zdjęć (356)
- Praca z klasą UIImagePickerController (358)
- Pobranie informacji z edycji obrazu (360)
- Sposób: pobieranie obrazu z adresu URL zasobu (360)
- Sposób: pstrykanie zdjęć i ich zapis w albumie zdjęć (362)
- Wybór pomiędzy aparatami (365)
- Zapis obrazów w katalogu Documents (366)
- Sposób: wysyłanie obrazów za pomocą wiadomości e-mail (367)
- Utworzenie treści wiadomości (368)
- Wyświetlenie kontrolera tworzenia wiadomości (369)
- Automatyzacja wykonywania zdjęć (370)
- Używanie własnych nakładek na podglądzie aparatu (370)
- Sposób: uzyskanie dostępu do aparatu z poziomu AVFoundation (371)
- Aparat jest wymagany (372)
- Sprawdzanie dostępności i rodzaju aparatu (372)
- Utworzenie sesji aparatu (373)
- Przełączanie pomiędzy aparatami (375)
- Podgląd dostarczany przez aparat (375)
- Ułożenie podglądu z aparatu (376)
- EXIF (376)
- Geometria obrazu (377)
- Tworzenie klasy pomocniczej do obsługi aparatu (379)
- Sposób: dodanie filtru Core Image (379)
- Sposób: wykrywanie twarzy za pomocą Core Image (381)
- Wyodrębnianie twarzy (386)
- Sposób: praca z obrazami rastrowymi (387)
- Rysowanie w kontekście rastrowym (388)
- Przetwarzanie obrazu (390)
- Rzeczywistość dotycząca przetwarzania obrazów (391)
- Sposób: pobieranie próbek na żywo (392)
- Sposób: utworzenie miniatur z obrazów (395)
- Wykonywanie zrzutu ekranu widoku (397)
- Rysowanie w plikach PDF (398)
- Tworzenie nowego obrazu zupełnie od początku (399)
- Sposób: wyświetlenie obrazu w przewijanym widoku (400)
- Tworzenie przewijanej strony zawierającej wiele obrazów (402)
- Podsumowanie (402)
8. Gesty i dotknięcia (405)
- Dotknięcia (405)
- Fazy (406)
- Dotknięcia i metody ich obsługi (407)
- Dotykane widoki (407)
- Obsługa wielu dotknięć (408)
- Procedury rozpoznawania gestów (408)
- Sposób: dodanie prostej możliwości bezpośredniej manipulacji interfejsem (409)
- Sposób: dodanie procedury rozpoznawania gestu przesunięcia (410)
- Sposób: jednoczesne używanie wielu procedur rozpoznawania gestów (412)
- Usuwanie konfliktów pomiędzy procedurami rozpoznawania gestów (414)
- Sposób: ograniczenie ruchu (415)
- Sposób: testowanie miejsca dotknięcia (417)
- Sposób: testowanie grafiki rastrowej (418)
- Sposób: zapewnienie trwałości podczas bezpośredniej manipulacji interfejsem (420)
- Przechowywanie informacji o stanie (421)
- Przywracanie informacji o stanie (422)
- Sposób: zapewnienie trwałości poprzez archiwizację (423)
- Sposób: dodanie obsługi opcji cofnij (425)
- Utworzenie menedżera opcji cofnij (425)
- Obsługa operacji cofnięcia dla widoku potomnego (426)
- Praca z paskiem nawigacyjnym (426)
- Rejestracja operacji cofnięcia (427)
- Dodanie obsługi operacji cofnięcia poprzez potrząśnięcie urządzeniem (429)
- Dodanie nazwy akcji dla operacji cofnięcia i powtórzenia (krok opcjonalny) (430)
- Zapewnienie obsługi edycji poprzez potrząśnięcie (430)
- Wymuszenie statusu First Responder (430)
- Sposób: rysowanie w miejscu dotknięcia ekranu (431)
- Sposób: płynne rysowanie (432)
- Sposób: wykrywanie okręgów (435)
- Utworzenie własnej procedury rozpoznawania gestów (439)
- Sposób: używanie wielu dotknięć (441)
- Przytrzymanie ścieżek dotknięć (443)
- I jeszcze jedno: przeciąganie z widoku przewijanego (444)
- Podsumowanie (448)
9. Tworzenie i używanie kontrolek (449)
- Klasa UIControl (449)
- Rodzaje kontrolek (449)
- Zdarzenia kontrolek (450)
- Przyciski (452)
- Dodawanie przycisków w module Interface Builder (453)
- Grafika (454)
- Łączenie przycisków z akcjami (455)
- Przyciski, które nie są przyciskami (455)
- Tworzenie własnych przycisków w Xcode (456)
- Tekst przycisku wyświetlany w wielu wierszach (458)
- Umieszczenie w przycisku animowanych elementów (459)
- Sposób: animacja reakcji przycisku (459)
- Sposób: dodanie suwaka wraz z własną gałką (461)
- Dostosowanie egzemplarza UISlider do własnych potrzeb (461)
- Poprawa skuteczności (465)
- Proxy wyglądu (465)
- Sposób: tworzenie kontrolki segmentowanej umożliwiającej odpowiedź na drugie
stuknięcie (466)
- Sposób: utworzenie podklasy klasy UIControl (468)
- Utworzenie egzemplarza UIControl (470)
- Śledzenie dotknięć (470)
- Przekazywanie zdarzeń (471)
- Praca z przełącznikami i stepperami (471)
- Sposób: utworzenie suwaka z gwiazdkami (472)
- Sposób: budowa tarczy dotykowej (476)
- Dodanie kontrolki wskaźnika strony (478)
- Sposób: utworzenie własnego rozwiązania przeznaczonego do przewijania stron (480)
- Utworzenie paska narzędziowego (484)
- Utworzenie paska narzędziowego w kodzie (485)
- Podpowiedzi dotyczące paska narzędziowego w iOS 5 (487)
- Podsumowanie (487)
10. Praca z tekstem (489)
- Sposób: ukrycie klawiatury po zakończeniu edycji tekstu w kontrolce UITextField (489)
- Właściwości dotyczące cech tekstu (491)
- Inne właściwości dotyczące pól tekstowych (492)
- Sposób: dostosowanie widoków wokół klawiatur (493)
- Sposób: przykrycie widoku tekstu własnym widokiem pomocniczym (495)
- Sposób: zmiana wielkości widoku po podłączeniu klawiatury sprzętowej (497)
- Sposób: utworzenie własnego widoku wprowadzania danych (500)
- Sposób: widoki potrafiące obsłużyć dane wejściowe w postaci tekstu (504)
- Sposób: dodanie własnego widoku danych wejściowych do widoku nietekstowego (507)
- Dodanie dźwięku kliknięcia (509)
- Sposób: zbudowanie lepszego edytora tekstów (509)
- Sposób: filtrowanie tekstu (511)
- Sposób: wykrywanie wzorców tekstu (513)
- Tworzenie własnych wyrażeń (514)
- Enumeracja wyrażenia regularnego (516)
- Wykrywanie danych (516)
- Dodanie wbudowanego detektora danych (517)
- Sposób: wykrywanie błędów w UITextView (517)
- Wyszukiwanie ciągów tekstowych (518)
- Sposób: wyświetlenie dostępnych czcionek (519)
- Sposób: dodanie własnych czcionek do aplikacji (520)
- Sposób: podstawy pracy z Core Text i ciągami tekstowymi z atrybutami (521)
- Użycie pseudo-HTML do utworzenia tekstu z atrybutami (526)
- Sposób: podział na strony w Core Text (531)
- Sposób: generowanie tekstu do dokumentu PDF (532)
- Sposób: wyświetlanie tekstu w nieregularnych kształtach (533)
- Sposób: wyświetlanie tekstu na ścieżce (536)
- Wyświetlanie tekstu na ścieżkach Béziera (541)
- Wyświetlanie proporcjonalne (541)
- Wyświetlanie liter (542)
- I jeszcze jedno: duży tekst na ekranie iPhone'a (543)
- Podsumowanie (546)
11. Tworzenie widoków tabel i zarządzanie nimi (547)
- Wprowadzenie do klas UITableView i UITableViewController (547)
- Sposób: implementacja prostej tabeli (550)
- Wypełnienie tabeli (550)
- Metody źródła danych (551)
- Ponowne użycie komórek (552)
- Udzielanie odpowiedzi na działania użytkownika (552)
- Kolor zaznaczonej komórki (552)
- Zmiana koloru tła tabeli (553)
- Typy komórek (553)
- Sposób: utworzenie własnej komórki w module Interface Builder (554)
- Dodanie własnych atrybutów zaznaczonej komórki (556)
- Zdefiniowanie naprzemiennych kolorów komórek (556)
- Usunięcie efektu zaznaczenia komórki (557)
- Tworzenie tabel zgrupowanych (557)
- Sposób: zapamiętanie stanu kontrolki we własnej komórce (558)
- Wizualizacja ponownego wykorzystania komórki (560)
- Utworzenie "wybranej" komórki tabeli (561)
- Praca z przyciskiem typu disclosure (562)
- Sposób: edycja tabeli (564)
- Wyświetlanie kontrolek usuwania komórek (567)
- Usunięcie z ekranu kontrolek usuwania komórek (567)
- Obsługa żądań usunięcia komórek (567)
- Obsługa funkcji cofnięcia operacji (567)
- Gest machnięcia w komórce (568)
- Dodawanie komórek (568)
- Zmiana kolejności komórek (568)
- Algorytmiczne sortowanie tabeli (569)
- Sposób: praca z sekcjami (570)
- Tworzenie sekcji (571)
- Zliczanie sekcji i rekordów (572)
- Zwrot komórek (572)
- Utworzenie nagłówka sekcji (573)
- Utworzenie indeksu sekcji (573)
- Mechanizm delegacji w sekcjach (574)
- Sposób: wyszukiwanie w tabeli (575)
- Utworzenie kontrolera opcji wyszukiwania (575)
- Utworzenie metod źródła danych (576)
- Metody delegata (578)
- Używanie indeksu wyszukiwania (578)
- Dostosowanie nagłówka i stopki do własnych potrzeb (579)
- Sposób: dodanie do tabeli opcji "pociągnij, aby odświeżyć" (581)
- Utworzenie w kodzie własnej tabeli zgrupowanej (583)
- Utworzenie zgrupowanej tabeli ustawień (583)
- Sposób: utworzenie tabeli zawierającej wiele tarcz (585)
- Utworzenie egzemplarza UIPickerView (586)
- Sposób: użycie kontrolki UIPickerView z widokami (588)
- Sposób: użycie egzemplarza UIDatePicker (590)
- Utworzenie egzemplarza UIDatePicker (592)
- I jeszcze jedno: formatowanie daty (592)
- Podsumowanie (595)
12. Rozpoczęcie pracy z Core Data (597)
- Wprowadzenie do Core Data (597)
- Utworzenie i edycja plików modelu (598)
- Generowanie plików klasy (600)
- Utworzenie kontekstu Core Data (600)
- Dodawanie obiektów (601)
- Wykonywanie zapytań do bazy danych (603)
- Wykrywanie zmian (604)
- Usuwanie obiektów (604)
- Sposób: użycie Core Data jako źródła danych tabeli (605)
- Sposób: wyszukiwanie w tabeli a Core Data (608)
- Sposób: edycja danych na żywo w widoku tabeli Core Data (610)
- Sposób: implementacja funkcji cofnij i przywróć w Core Data (612)
- Podsumowanie (615)
13. Komunikaty ostrzeżeń wyświetlane użytkownikowi (617)
- Bezpośrednia komunikacja z użytkownikiem poprzez komunikaty (617)
- Utworzenie prostego komunikatu (617)
- Delegat komunikatu (618)
- Wyświetlenie komunikatu (620)
- Rodzaje komunikatów (620)
- "Proszę czekać" - wyświetlenie użytkownikowi paska postępu (621)
- Używanie klasy UIActivityIndicatorView (621)
- Używanie klasy UIProgressView (622)
- Sposób: komunikat bez przycisków (623)
- Utworzenie pływającego wskaźnika postępu (625)
- Sposób: utworzenie komunikatu modalnego w pętli działania (625)
- Sposób: użycie metody o zmiennej liczbie argumentów do utworzenia komunikatu (628)
- Wyświetlenie prostego menu (629)
- Przewijanie menu (631)
- Wyświetlanie tekstu w egzemplarzu UIActionSheet (631)
- Sposób: utworzenie własnego widoku komunikatu (631)
- Widok, który można nacisnąć (633)
- Sposób: proste okno typu Popover (633)
- Sposób: powiadomienia lokalne (635)
- Wskaźniki komunikatów (636)
- Używanie plakietek w aplikacji (636)
- Sposób: proste komunikaty audio (636)
- Dźwięki systemowe (637)
- Wibracja (638)
- Komunikaty (638)
- Opóźnienia (639)
- I jeszcze jedno: wyświetlenie komunikatu i umożliwienie dostosowania poziomu
głośności (640)
- Podsumowanie (641)
14. Możliwości urządzenia (643)
- Uzyskanie dostępu do informacji podstawowych (643)
- Dodanie ograniczeń związanych z możliwościami urządzeń (644)
- Sposób: pobieranie informacji dodatkowych o urządzeniu (646)
- Monitorowanie poziomu naładowania baterii w iPhonie (647)
- Włączanie i wyłączanie czujnika zbliżeniowego (648)
- Sposób: użycie przyśpieszeniomierza w celu ustalenia "góry" urządzenia
(649)
- Synchroniczne pobieranie bieżącego kąta przyśpieszeniomierza (651)
- Obliczanie kąta względnego (652)
- Praca z podstawową orientacją (652)
- Sposób: użycie przyśpieszeniomierza do poruszania obiektami po ekranie (653)
- Dodanie nieco blasku (656)
- Sposób: podstawy Core Motion (656)
- Sprawdzanie dostępności czujników (657)
- Obsługa bloku (657)
- Sposób: pobieranie i używanie informacji o położeniu urządzenia (660)
- Użycie zdarzeń ruchu do wykrycia wstrząśnięcia urządzeniem (661)
- Sposób: użycie przyśpieszeniomierza do wykrycia gestu wstrząśnięcia (663)
- Sposób: używanie ekranów zewnętrznych (666)
- Wykrywanie ekranu (667)
- Pobieranie informacji o rozdzielczości ekranu (667)
- Konfiguracja wyjścia wideo (667)
- Dodanie obiektu DisplayLink (668)
- Kompensacja overscanningu (668)
- VIDEOkit (668)
- I jeszcze jedno: sprawdzenie dostępnej ilości wolnego miejsca na dysku (671)
- Podsumowanie (672)
15. Sieć (675)
- Sprawdzenie stanu połączenia z siecią (675)
- Sposób: rozbudowa klasy UIDevice o możliwości w zakresie sprawdzania dostępności
(677)
- Skanowanie w poszukiwaniu zmian w połączeniu (679)
- Pobieranie IP i informacji o komputerze (681)
- Używanie kolejek, aby nie blokować aplikacji (684)
- Sprawdzanie dostępności witryny (685)
- Pobieranie synchroniczne (687)
- Pobieranie asynchroniczne w teorii (690)
- Sposób: pobieranie asynchroniczne (691)
- Obsługa wyzwań związanych z uwierzytelnieniem (697)
- Przechowywanie danych uwierzytelniających (697)
- Sposób: przechowywanie i pobieranie danych uwierzytelniających z pęku kluczy (700)
- Sposób: przekazywanie danych do serwera (703)
- Twitter (706)
- Sposób: konwersja XML na postać drzewa (707)
- Drzewa (707)
- Utworzenie drzewa przetwarzania (707)
- Użycie drzewa wyników (709)
- Sposób: utworzenie prostego serwera opartego na sieci (711)
- I jeszcze jedno: użycie serializacji JSON (714)
- Podsumowanie (715)
Skorowidz (717)
728 stron, Format: 17.0x23.0cm, oprawa miękka