Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Začínáme s
Inspektory pro XIBy
7. září 2011, 00.00 | Inspektory jsou jedním z nejdůležitějších prvků editoru XIBů: právě jejich prostřednictvím nastavujeme nejrůznější atributy objektů, jež síť tvoří – to, co bychom jinak museli dělat programově pomocí odpovídajících služeb API.
Dnes se proto na ně podíváme podrobněji a řekneme si o nich několik možná ne zcela samozřejmých věcí.
Připomeňme, že v pravém sloupci okna Xcode je vždy k dispozici dvojice standardních inspektorů. Prvý z nich pod ikonkou, připomínající list papíru, obsahuje informace o aktuálně editovaném souboru; druhý, jehož ikonka dvojicí vlnek evokuje nejspíše asi dovolenou u moře, nabízí stručnou nápovědu (jež jen málokdy pomůže a stejně je obvykle, neví-li člověk vše potřebné z hlavy, otevřít detailní popis API v okně Organizer).
Začneme proto až třetí ikonkou, tou, jež na pohled připomíná okénko nějakého formuláře.
Inspektor identity
Prvý z inspektorů specifických pro práci s objekty v sítích XIB je poměrně jednoduchý, ale velmi důležitý. Vypadá takto:
Jeho jediným podstatným prvkem je prvé textové pole v oddílu "Custom Class": právě zde můžeme určit aktuální podtřídu, jež má po zavedení NIBu do paměti nahradit třídu obecnější, jak jsme si to popsali v části "Specifické podtřídy" předminulého článku.
Na obrázku výše vidíme, že ačkoli v XIBu explicitně pracujeme s objektem třídy UIViewController, po zavedení do paměti bude na jeho místě stát instance třídy FirstViewController, tedy přesně to, co v aplikaci potřebujeme. Tuto službu můžeme využít pro libovolný objekt, ale naprosto běžná je právě u řídicích objektů rámců (a u rámců samotných, ačkoli v iOSu – na rozdíl od Mac OS X – využíváme vlastní podtřídy rámců relativně méně často).
Klepnutím na šedou šipku při pravém okraji textového pole si můžeme otevřít rozhraní odpovídající třídy; otevření nabídky zobrazí všechny třídy v projektu, jež lze na daný objekt rozumně aplikovat.
Ostatní prvky inspektoru identity nejsou obvykle zapotřebí a můžeme je prozatím klidně ignorovat. Poměrně podstatný zde snad je panel pro nastavení atributů externího přístupu ("accessibility"), ale tím se v současnosti nezabýváme (a navíc standardní nastavení je většinou v pořádku).
Inspektor atributů
Jak jsme si řekli už minule, inspektor atributů je asi nejdůležitějším a nejvyužívanějším prvkem editoru XIBů; rozhodně je také nejsložitější. Navíc jeho obsah samozřejmě závisí na konkrétním zvoleném objektu (to samozřejmě do jisté míry platí pro libovolný inspektor, ale u inspektoru atributů je to nejmarkantnější). Nejprve si proto řekneme několik obecných pravidel pro práci s tímto inspektorem; konkrétními inspektory pro konkrétní třídy se budeme zabývat samostatně později podle potřeby.
Inspektor atributů obsahuje panely – jsou-li v Xcode k dispozici – jak pro třídu zvoleného objektu, tak i pro všechny její nadtřídy. Na obrázku vidíme jako příklad inspektor atributů objektu Token Field; jeho sekce jsou uzavřené, aby bylo dobře vidět, jak reflektují postupně třídy NSTokenField, NSTextField, NSControl a NSView (další nadtřídy NSResponder a NSObject už vlastní inspektory nemají):
To je velmi logické: každá z tříd v linii dědičnosti přináší nějaké vlastní atributy, a je proto samozřejmé, abychom je mohli měnit vždy prostřednictvím adekvátního inspektoru.
Co naopak logické není je nemožnost doplnit specifický inspektor pro naše vlastní podtřídy; v původním Interface Builderu to nebyl žádný problém, ale Xcode 4 bohužel tuto možnost nepodporuje. Můžeme jen doufat, že ji Apple brzy opět doplní, protože bez ní je práce s objekty z vlastních nebo 3rd party knihoven extrémně nepohodlná.
V některých případech přibudou ještě speciální panely podle aktuální situace – např. u kořenových objektů XIBů pro iOS lze bez ohledu na jejich typ volit velikost podle simulované velikosti obrazovky zařízení v bloku "Simulated Metrics", a to samostatně pro iPad i iPhone:
Inspektor rozměrů
Třetí z inspektorů slouží pro určení rozměrů a automatických změn velikostí rámců:V jeho horní části můžeme přímo zadat umístění a velikost v rámci souřadné soustavy nadřízeného rámce. Pomocí panelu vlevo si můžeme vyžádat zobrazení (a vkládání) pozice kteréhokoli z devíti základních bodů; Xcode automaticky provede potřebné přepočty.
Často bývají některá z polí šedá a nelze jejich obsah měnit: tak je tomu u grafických prvků, jejichž velikost je z nějakého důvodu fixní. Ve výjimečných případech pak sice můžeme velikost změnit programově např. pomocí služby setFrame:, ale na výsledek se obvykle nedá koukat: Apple většinou dobře ví, proč velikosti některých prvků fixuje. Leckdy také jde o čistě technickou záležitost, kdy grafický prvek využívá podkladového obrázku.
Pro určování rozměrů a polohy rámců je samozřejmě mnohdy vhodnější hlavní pracovní oblast editoru, kde můžeme objekty přímo přemísťovat pomocí myši nebo klávesnice (s přepínačem Shift šipky posunují objekty o větší krok), a měnit tak jejich rozměry.
Velmi důležitá dolní část inspektoru umožňuje specifikovat, jak se budou rozměry rámce měnit, pokud se změnil rozměr rámce nadřízeného. Původní Interface Builder obsahoval velmi intuitivní přepínače ve formě "pružin" a "pevných drátů"; z nepochopitelných důvodů je firma Apple nahradila daleko méně zřejmými "šipkami a íčky", jež vidíme na obrázku. Naštěstí je ale v pravé části animovaný příklad, s jehož pomocí snadno nalezneme variantu automatických změn velikostí, jakou přesně potřebujeme.
Pozor – ačkoli by se na první pohled mohlo znát, že na iPadu a iPhone, kde nejsou okna s měnitelnou velikostí, není korektní nastavení těchto atributů důležité, opak je pravdou:
• předně, rozměry rámce se mění při rotaci přístroje. Velmi často stačí korektně nastavit "dráty" v tomto inspektoru, a není již zapotřebí dělat nic pro korektní podporu obou poloh;
• telefon navíc může limitovat viditelnou oblast pruhem representujícím aktuální hovor; pak se okno na výšku poněkud zmenší, a je zapotřebí, aby na to naše rámce reagovaly korektně (v simulátoru existuje přímo standardní služba, jež umožní tento pruh vyvolat a situaci otestovat).
Inspektor vazeb
V inspektoru vazeb – v iOSu posledním – vidíme všechny vazby mezi zvoleným objektem a kterýmkoli jiným, jež jsou representovány "outlety" a "akcemi" (ostatně jak víme z předminulého dílu, "akce" ve skutečnosti není nic jiného, než další "outlet", doprovázený uloženým selektorem).
Tímto inspektorem se budeme samozřejmě zabývat podrobně, protože je spolu s inspektorem atributů daleko nejpodstatnější při práci s XIBy; necháme si to ale na příště, kdy si budeme o vazbách a práci s nimi povídat podrobně.
Inspektor objektových vazeb
"Objektové vazby" – bindings – je poměrně velmi geniální mechanismus, umožňující sestavovat řídicí vrstvu v modelu MVC stejně snadno, jako vrstvu grafických objektů. Bohužel, v iOSu není k dispozici; proto jen odkážeme na články v našem seriálu, kde jsme se těmto službám věnovali podrobně.
Inspektor se naštěstí oproti původnímu z Interface Builderu téměř nezměnil – jeho vzhled je mírně odlišný a absurdní umístění v pravém sloupci samozřejmě zůstává, ale obsah a funkce jsou stále stejné:
Inspektor animačních efektů
Poslední z inspektorů, určený pro nastavení animačních a vzhledových efektů:také odbudeme jen několika řádky: předně proto, že v iOSu bůhvíproč není k dispozici vůbec (ačkoli většina odpovídajících služeb na knihovnách je a jejich programové nastavení je možné), a kromě toho také proto, že jsme se o velmi zajímavých službách knihovny Core Animation dosud nebavili vůbec, takže zatím nemáme odpovídající základy. Vrátíme se k němu samozřejmě někdy později, až se budeme touto knihovnou a jejími možnostmi zabývat podrobněji.
Obsah seriálu (více o seriálu):
- Nastal čas na kakao...
- Tak nejdřív kakao ochutnáme...
- Programovací jazyk C: velmi, velmi stručně
- Objective C: to si vysvětlíme podrobněji
- Co jsme si o Objective C ještě neřekli...
- Nastal čas na kakao - Vznik a zánik objektů
- Nastal čas na kakao - Kopírování objektů
- Nastal čas na kakao - Skryté podtřídy
- Nastal čas na kakao - Základní služby objektů
- Nastal čas na kakao - Jak správně psát v Objective C
- Nastal čas na kakao - Jak správně importovat
- Nastal čas na kakao - Podtřídy, delegáti, vkládání, jak se to rýmuje?
- Nastal čas na kakao - Využití kategorií namísto dědičnosti
- Nastal čas na kakao - Vkládání objektů a přesměrování zpráv
- Nastal čas na kakao - Inicializace a rušení objektů
- Nastal čas na kakao - Metody initWith... a designovaný inicializátor
- Nastal čas na kakao - Inicializace: tipy a triky
- Nastal čas na kakao - Accesory: přístup k proměnným instancí
- Nastal čas na kakao - Šedá je teorie, zelený je strom života...
- Nastal čas na kakao - Více o XCode: inspektory
- Nastal čas na kakao - Aplikace RSS2: datový model
- Nastal čas na kakao - Aplikace RSS: implementace datového modelu
- Nastal čas na kakao - Aplikace RSS: parsování XML
- Nastal čas na kakao - Interface Builder a uživatelské rozhraní
- Nastal čas na kakao - Interface Builder: atributy objektů
- Nastal čas na kakao - Interface Builder: atributy objektů
- Nastal čas na kakao - Druhý kontrolér a dokončení aplikace
- Nastal čas na kakao - Drobná vylepšení a zdokonalení...
- Nastal čas na kakao - Ladění
- Nastal čas na kakao - Třídy Foundation Kitu
- Nastal čas na kakao - Třídy Foundation Kitu (2)
- Nastal čas na kakao - Textové řetězce: NS(Mutable)String
- Nastal čas na kakao - Čísla, binární data a další...
- Nastal čas na kakao - Archivace objektů
- Nastal čas na kakao - Trocha magie, aneb distribuované objekty
- Nastal čas na kakao - Málem bychom zapomněli: NSAutoreleasePool
- Nastal čas na kakao - Zpracování výjimek: NSException
- Nastal čas na kakao - NSInvocation a černá magie
- Nastal čas na kakao - Kakao v Tygrovi
- Nastal čas na kakao - Notifikace: nepřímé předávání zpráv
- Nastal čas na kakao - NSUserDefaults
- Nastal čas na kakao - Co nového ve Foundation Kitu
- Nastal čas na kakao – s Intelem, s Intelem, jedeme do...
- Co nového v Xcode
- Začínáme s AppKitem
- Jak MVC v Kakau vypadá doopravdy?
- Jak MVC v Kakau vypadá doopravdy: dokončení
- Přehled tříd AppKitu
- Nastal čas na kakao - Přehled tříd AppKitu 2
- Přehled tříd AppKitu 3: zbývající třídy GUI
- Přehled tříd AppKitu 4: textový systém
- Nastal čas na kakao - Přehled tříd AppKitu 5: hlavně grafika
- Přehled tříd AppKitu 6: dokumentový systém
- Přehled tříd AppKitu 7: dokončení
- Pojmenované vlastnosti objektů
- Pojmenované vlastnosti objektů: implementace
- Pojmenované vlastnosti objektů: relace 1:N
- Pojmenované vlastnosti objektů: řazení jmen a agregační funkce
- Sledování změn objektů
- Sledování změn objektů – ukázka
- Sledování změn objektů – zdrojový kód
- Sledování změn objektů: kód modelu
- Sledování změn objektů: přímý přístup
- Kontroléry a vazby
- Vázání vazeb
- Další vazby s jednoduchým kontrolérem
- Implementace a použití převodu hodnot
- Validace hodnot
- Validace a chyby, a jedna hezká vazba...
- Práce s polem objektů
- Základní vazby NSArrayControlleru
- Převodníky, přepínače, placeholdery
- Mírná vylepšení v mezích zákona
- Objective C 2.0 - novinky z Leoparda
- NSTreeController
- Programování v Cocoa - Pár tipů a triků
- Programování v Cocoa - Základy kreslení
- Kterak nakreslit modrý obdélník...
- Další služby pro kreslení
- Obrázky a písmenka...
- Události a myš
- Lepší práce s myší
- Události klávesnice
- Input Management
- Příkazy a schránka
- Další události
- Táhni a padni
- Byli jsme na tahu; nyní padneme.
- Zvolme si, jak vhodit
- Drobnosti a chybičky
- Speciální případy tahání či házení
- Kterak táhnout něco, co neexistuje?
- Jak na sítě...
- NSURLConnection
- Safari za minutu
- Služby WebKitu
- Kakao v Leopardu
- Druhé Objective C
- Druhé Objective C: různé drobnosti
- Druhé Objective C: kategorie a protokoly
- Druhé Objective C: nový příkaz cyklu
- Druhé Objective C: atributy a accesory
- Druhé Objective C: atributy a accesory
- 64 je dvakrát 32
- Ubicumque dulce est, ibi et acidum invenies...
- Irbis: že prý žádné novinky?
- Blok sem, blok tam, nám už je to všechno jasné...
- Bloky jsou i v AppKitu
- Irbis a Foundation Kit
- Kde jsou má data?
- Kde jsou má data? V NSCache!
- Soubor, jméno, URL, jak se to rýmuje...
- Další podpora NSURL
- Zabíjení!
- A máme tady i...OS!
- Systémové prvky GUI
- Programování pro iOS 1. díl - Rozdíly mezi "i" a "Mac"
- Programování pro iOS - 2. Začínáme programovat
- Programování pro iOS - 3. základní ovladače a propojení GUI s kódem
- Programování pro iOS - 4. Varovná hlášení
- Programování pro iOS - 5. Rámce a jejich řídicí objekty
- Programování pro iOS - 6. Ukládání dat
- Programování pro iOS - 7. Správa paměti a starý restík
- Programování pro iOS - 8. Dokončení aplikace
- Programování pro iOS - 9. Jak dostat aplikaci do iPhone
- Programování pro iOS - 10. Instalace aplikace do cizího iPhone
- Programování pro iOS - 11. Jak dostat aplikaci do libovolného iPhone
- Programování pro iOS - 12. Touching!
- Programování pro iOS - 13. Kreslíme na iPhone
- Programování pro iOS - 14. Udělejme gesto
- Programování pro iOS - 15. Další gesta
- Programování pro iOS - 16. Více prstů, více zábavy
- Programování pro iOS - 17. Podpora standardních gest
- Programování pro iOS - 18. Recognizery v iOS
- Programování pro iOS - 19. Další standardní recognizery
- Programování pro iOS - 20. Co nového v iOSu
- Programování pro iOS - 21. "Multitasking"
- Programování pro iOS - 22. Nulla est honesta avaritia nisi temporis
- Programování pro iOS - 23. Jak se aktivovat, jsme-li v pozadí
- Programování pro iOS - 24. Zbývající drobnosti
- Programování pro iOS - 25. Řídicí objekty rámců
- Programování pro iOS - 26. Jak se dělá UIViewController
- Programování pro iOS - 27. Kde vzít rámce
- Programování pro iOS - 28. Základní služby
- Programování pro iOS - 29. Práce s rámci
- Programování pro iOS - 30. Rotace zařízení
- Programování pro iOS - 31. Správa paměti v rámcích
- Programování pro iOS - 32. Řídicí objekt pro tabulky
- Programování pro iOS - 33. Řídicí objekt pro strom
- Programování pro iOS - 33. Více o UINavigationControlleru
- Programování pro iOS - 35. Ještě jednou UINavigationController
- Programování pro iOS - 36. Po navigátoru taby
- Programování pro iOS - 37. Více o UITabBarControlleru
- Programování pro iOS - 38. Dokončení UITabBarControlleru
- Programování pro iOS - 39. UIPopoverController
- Programování pro iOS - 40. Další triky UIPopoverControlleru
- Programování pro iOS - 41. Zbývající služby UIPopoverControlleru
- Programování pro iOS - 42. UISplitViewController
- Programujeme v
iTunesXcode 4 - Programování pro iOS - 44. Předvolby Xcode 4
- Programování pro iOS - 45. Práce v Xcode 4
- Xcode 4: projekt a cíle
- Xcode 4: práce s cíli
- Xcode 4: Build Settings
- Xcode 4: Build Phases
- Xcode4: Build Phases podruhé
- Xcode 4: Co jsou to Build Rules?
- Xcode4: taje editoru
- Xcode4: automatické doplňování v editoru
- XIBy chyby
- Více o XIBech
- Editor XIBů
- Inspektory pro XIBy
- Vazby mezi objekty v XIBech
- Vazby mezi objekty v kódu
- Paletky Xcode pro XIBy
- Xcode 4: levý sloupec
- Xcode 4: okno Organizer
- Xcode 4: okno Organizer, část druhá
- Xcode 4: co je to Workspace?
- Xcode 4: základy schémat
- Xcode 4: akční schémata