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
Editor XIBů
31. srpna 2011, 00.00 | V poslední době se v našem seriálu zabýváme NIBy a XIBy – jak už víme, jde jen o dvě různá jména téže věci. Vysvětlili jsme si velmi podrobně, oč vlastně jde; nyní se začneme zabývat podporou v Xcode pro práci s těmito soubory.
Co to jsou objektové sítě XIB – po sestavení aplikace převedené do binární podoby NIB s týmž obsahem – již víme. Víme také, že jakkoli se v principu mohou používat pro ukládání zcela libovolných objektů, v praxi jich běžně využíváme pro objektové sítě, reprezentující grafické uživatelské rozhraní aplikace.
Ve dvou minulých dílech, v nichž jsme si podrobně vysvětlili obsah a funkci NIBů, jsme se opakovaně zmínili o tom, že je možné (a velmi praktické) mít k dispozici obecný editor, v němž takovéto objektové sítě lze vytvářet a upravovat. Takový editor je od verse 4 nahoru součástí integrovaného vývojového prostředí Xcode, a dnes se na něj podíváme podrobněji.
Vytvoření a otevření XIBu
Objektovou síť XIB vytváříme přesně stejně, jako jakýkoli jiný soubor, který je součástí projektu: základní kostru, obsahující nejběžnější věci, nám automaticky vytvoří Xcode při zakládání nového projektu na základě odpovídajícího projektového vzoru; kromě toho můžeme kdykoli vytvořit XIB nový pomocí standardní služby "New File..." v navigátoru v levé části okna a pak výběrem ze skupiny "User Interface" nebo přetažením z paletky v dolní části pravého sloupce:
Klepnutím na soubor XIB v navigátoru pak jej otevřeme v editoru v prostřední části okna – nebo poklepáním v okně novém – přesně stejně, jako jakýkoli jiný soubor. Xcode formát XIB samozřejmě rozezná, a aktivuje speciální editor.
Editor XIBů
Tento editor je poměrně složitý; musí totiž obsahovat řadu samostatných prvků:
• přehlednou tabulku, ukazující kompletní obsah XIBu a nabízející pohodlný přístup ke kterémukoli objektu, který je v XIBu uložen;
• grafickou podobu těchto objektů, odpovídající jejich normálnímu vzhledu na obrazovce počítače;
• inspektory atributů, zobrazující nastavení konkrétních atributů těchto objektů a umožňující je měnit;
• paletu objektů, z nichž lze vybírat při přidávání nových prvků do XIBu;
• řadu specifických příkazů, jež úzce souvisí právě jen s prací s objekty v XIBu (namátkou třeba možnost grafického srovnání objektů do sloupce nebo do řady).
Komukoli, kdo má alespoň zlomek zdravého rozumu, je naprosto zřejmé, že tyto požadavky lze rozumně splnit pouze v samostatné aplikaci, jež bude podporovat několik samostatných oken a palet a jež bude mít kompletní vlastní menu; tato aplikace by mohla s Xcode samozřejmě úzce spolupracovat. Přesně tak tomu také bylo od poloviny 80. let, kdy NIBy ve firmě NeXT vymysleli, až donedávna.
Bohužel, nedávno se někdo ve firmě Apple rozhodl, že vše je třeba integrovat do Xcode, a navíc, že jediný smysluplný způsob práce s počítačem je práce v celoobrazovkovém režimu – tak, jak tomu bývalo standardem v MS DOSu v dobách dřevních. Stokráte bohužel to byl někdo, komu programátoři museli naslouchat, takže editor XIBů je nacpaný naprosto absurdním a pro práci extrémně nepohodlným způsobem do okna Xcode. Lze jej sice – díkybohu aspoň za to – otevřít v samostatném okně, nicméně nelze otevřít samostatně jednotlivé prvky GUI (ty jsou uloženy v podřízených oknech zhruba na témže principu, jemuž jsme se vždy právem vysmívali jako dokonalé absurditě ve Windows 3), a nelze samostatně otevřít jednotlivé paletky a inspektory. Úpravy XIBů jsou proto v současnosti krajně nešikovné :(
Editor sám – bez paletek a inspektorů, k nimž se vrátíme za chvilku – vypadá zhruba takto:
Vidíme, že editační okno je rozděleno na dvě části: v levé je přehled objektů, jež jsou v XIBu uloženy; v horním ze dvou bloků jsou zástupné objekty "File's Owner" a "First Responder" – prvému z nich již dokonale rozumíme; druhý prozatím ponecháme stranou, ostatně v iOSu, na nějž se převážně soustředíme, je jeho úloha poměrně okrajová.
V dolním bloku pak vidíme všechny kořenové objekty, uložené v XIBu: na našem obrázku jsou tři – obecný objekt "RangeLogAD", okno jménem "Window", a instanci nám již důvěrně známé třídy UITabBarController, jež v okně bude reprezentovat kořenový řídicí objekt rámců s jednotlivými "taby" v dolní liště. Objekty, jež obsahují další vnořené prvky – zde jen "tab bar controller" – lze pomocí standardního trojúhelníčku "otevřít", takže uvidíme jejich obsah a budeme s ním moci pracovat:
Bohužel velmi šikovné možnosti zobrazení prvků v "browseru" (tedy v několika sloupcích) a v tabulce, jež bývaly v samostatném Interface Builderu samozřejmostí, již Xcode nenabízí.
V pravé části pak jsou samy grafické prvky – v našem případě tedy okno "Window"; to, že je v levé části editoru zvoleno, indikuje modré orámování.
Důvod, proč ilustrujeme text jiným projektem, je velmi jednoduchý a nedůležitý: náš testovací projekt, na němž pracujeme již delší dobu, je určen pro iPad, a jeho okna a rámce jsou proto velké a do absurdního "jednookenného" integrovaného prostředí Xcode se dobře nevcházejí; projekt Range Log, z nějž jsme snímky převzali, je ale pro iPhone a jeho malá okna se vejdou poměrně slušně.
Inspektory a palety
Panely inspektorů a palet se po otevření XIBu náhle objeví jako další ikonky v pravém sloupci integrovaného prostředí – ten při práci s XIBem takřka vždy musíme otevřít, jinak nelze dělat téměř nic.
Čtveřice inspektorů se objeví v horní části pravého sloupce:
Jejich ikonky, podle mého názoru krajně neintuitivní, postupně zleva – po přeskočení prvých dvou standardních ikonek pro atributy souboru a rychlou nápovědu (to jsou ty dvě vlnky) postupně reprezentují
• podivné "okénko formuláře" (nebo co to má být) reprezentuje inspektor identity, jehož hlavní službou je určit specifickou podtřídu (tuto službu a její smysl jsme si podrobně vysvětlili na konci minulého dílu);
• ikonka podobná kratičkému vodorovnému posuvníku odkazuje na inspektor atributů (na minulém obrázku jej vidíme vybraný). My se inspektory budeme podrobně zabývat příště, ale je předem zřejmé, že půjde o inspektor asi vůbec nejpoužívanější, jehož prostřednictvím můžeme upravovat atributy zvoleného objektu – jako příklad si zde můžeme ukázat třeba řádek "Background" zhruba uprostřed, v němž můžeme libovolně vybrat barvu pro pozadí okna;
• třetí ikona, jež připomíná šikmo položenou cihlu, má patrně vypadat jako měřítko, neboť reprezentuje inspektor velikosti – v něm můžeme určit jak samotnou velikost zvoleného objektu, tak i mechanismus automatických změn této velikosti při změně velikosti okna, jež jej obsahuje;
• konečně pak na obrázku poslední šipka, jako jediná z ikonek jakžtakt intuitivní, reprezentuje inspektor vazeb, v němž vidíme (a můžeme měnit) vazby mezi zvoleným objektem a všemi ostatními (včetně zástupných).
Pokud bychom pracovali na XIBu určeném pro aplikaci Mac OS X, přibudou další dvě ikonky s odpovídajícími inspektory:
• inspektor objektových vazeb pod ikonkou, jež vypadá trochu jako symbol vlněného prádla;
• a pod ikonkou připomínající vzdáleně připomínající stoh papírů inspektor animačních efektů.
Paletky jsou pro práci v XIBech relevantní dvě: naprosto zásadní důležitost samozřejmě má paleta objektů, jež běžně vkládáme do XIBů; o něco méně důležitá (a velmi nepohodlně implementovaná) pak je paleta obsahující multimediální soubory – především obrázky –, jež jsou součástí projektu.
Ty jsou obě umístěny do dolní části pravého sloupce – prvá z nich (již vidíme na obrázku otevřenou) pod ikonou krychličky, již Apple používá jako symbol objektu; druhá má ikonku, jež vypadá jako políčko na filmu (což je věc nám starším důvěrně známá, ale pochybuji, že by mnoho současných začínajících programátorů skutečný film vůbec kdy v době digitálních fotoaparátů i kamer vidělo :))
Pokud máte dojem, že to znamená, že buď musíte mít nešikovně malý inspektor nebo paletu, máte dojem naprosto správný: ti, kdo v Apple navrhovali grafické uživatelské rozhraní Xcode 4, se museli zbláznit – nebo v životě neprogramovali. Nebo možná obojí :(
V příštích dílech si vysvětlíme detaily použití jednotlivých inspektorů a palet a také si ukážeme několik triků, jež alespoň do jisté míry umožní obejít ty nejhorší z problémů, zaviněných "celoobrazovkovým" designem Xcode. Dnes si jen ukážeme "přehledné" pracovní okno při editaci jednoduchého XIBu:
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