Základní vazby NSArrayControlleru - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Informace

Základní vazby NSArrayControlleru

18. července 2006, 00.00 | Dnes připravíme několik nových vazeb, jež jsou možné jen s NSArrayControllerem, a ukážeme si konečně, jak tedy takový kontrolér doopravdy funguje a co umí.

Na konci minulého dílu jsme použili poněkud špinavý trik ke změně našeho dosavadního NSObjectControlleru přímo v NIBu v NSArrayController; nic jiného nám ovšem nezbylo, pokud jsme nechtěli přijít o všechny v minulých dílech připravené vazby.

Dnes připravíme několik nových vazeb, jež jsou možné jen s NSArrayControllerem, a ukážeme si konečně, jak tedy takový kontrolér doopravdy funguje a co umí.

Nastavení atributů

Hned po otevření NIBu vidíme, že se skutečně typ kontroléru změnil – namísto zelené krychličky NSObjectControlleru máme nyní v okně NIBu trojici krychliček NSArrayControlleru. Můžeme jej pro lepší konsistenci přejmenovat (jak dávno víme, je to zcela lhostejné – jména v okně NIBu pouze pomáhají naší vlastní orientaci, jinak je nikdo a nic nijak nevyužívá).

Otevřeme-li inspektor atributů, vidíme, že NSArrayController jich má mnohem více, než jich měl jednoduchý objektový kontrolér; nastavíme je následujícím způsobem:

Prvé dva přepínače již známe z NSObjectControlleru; význam ostatních je následující:

  • "Avoids empty selection" se snaží – je-li to možné – neustále mít vybraný některý z datových objektů modelu;
  • "Preserves selection" se snaží skupiny vybraných objektů zachovat kdykoli je to jen trochu možné;
  • "Selects inserted objects" automaticky vybere nově vytvořený objekt;
  • "Always uses..." by vypnulo vyhledávání shodných hodnot atributů; k tomuto přepínači se ještě vrátíme;
  • "Clears filter predicate..." nám prozatím může být lhostejný; řekneme si o něm více až se budeme učit filtrování zobrazovaných objektů.

Příprava GUI a navázání akcí

Pro začátek vezmeme grafické uživatelské rozhraní, jež jsme připravili v minulých dílech, a pouze je doplníme o tabulku (v níž se budou zobrazovat všechny objekty modelu) a pár tlačítek, jejichž prostřednictvím si vyžádáme základní akce.

Můžeme třeba jen trochu zvětšit okno, a tabulku i tlačítka umístit pod současné ovladače; do tabulky vložíme tři sloupce – nadepíšeme je "name", "width" a "height" –, a k dolnímu okraji okna přidáme tlačítka "New" a "Delete". Tato tlačítka zcela standardním způsobem pomocí "drátů" připojíme k akcím insert: a remove: kontroléru:

Chceme-li, můžeme přidat další dvojici tlačítek, a navázat je na akce selectNext: a selectPrevious: – bez toho bychom se ovšem již obešli, neboť tabulku můžeme ovládat i řadou jiných způsobů.

Způsobem, který již dávno dobře známe, použijeme vazeb na standardní atributy kontroléru pro podmínění tlačítek momentální hodnotou atributů "canInsert" a "canRemove" (případně "canSelectNext" a "canSelectPrevious"):

Propojení tabulky a kontroléru

Tabulky NSTableView a jejich sloupce NSTableColumn nabízejí mnoho nejrůznějších vazeb, jež můžeme kombinovat na mnoho způsobů pro dosažení nejrůznějších speciálních efektů. Příjemné ale je, že pokud požadujeme standardní chování, nemusíme zdaleka navazovat všechny potřebné vazby; objekty NSTableView a NSTableColumn jsou totiž "chytré" a dokáží spolupracovat.

Konkrétně to znamená, že v našem jednoduchém případě nemáme vůbec zapotřebí nastavovat žádné vazby pro tabulku; určíme pouze vazby pro sloupce: ty navážeme na atribut kontroléru "arrangedObjects" (neboť každý sloupec samozřejmě má obsahovat "svou" hodnotu atributu pro všechny zobrazované objekty), a v prvém z nich zvolíme atribut modelu "fullName", ve druhém "width", ve třetím "height":

Nezapomeneme nastavit přepínač "Validates Immediately" – jak již víme z předchozích dílů, je to nutnou podmínkou proto, aby fungovaly validace atributů; kromě toho samozřejmě můžeme podle libosti nastavit známý atribut "Continuously updates value". Vše ostatní ponecháme ve standardním nastavení; o konkrétních možnostech jednotlivých atributů vazeb si víc řekneme příště.

A... to je vše!

Co vše aplikace umí?

Můžeme aplikaci zbuildovat a spustit, a zjistíme, že na to, že jsme nenapsali ani jediný řádek zdrojového kódu, toho umí překvapivě docela hodně:

  • udržuje seznam objektů, do nějž můžeme přidávat tlačítkem "New" a z nějž můžeme zvolené objekty odstraňovat tlačítkem "Delete";
  • obsah tabulky můžeme setřídit podle kteréhokoli sloupce vzestupně i sestupně klepnutím na jeho titulek;
  • všechna tlačítka a ostatní prvky uživatelského rozhraní se chovají konsistentně – pokud např. nemáme žádný objekt vybraný, není tlačítko "Delete" funkční;
  • hodnoty vybraného objektu se automaticky a korektně zobrazují ve všech ovladačích v horní části okna. Můžeme je měnit prostřednictvím kteréhokoli z ovladačů (včetně nové editace přímo v políčkách tabulky), a všechny ovladače se korektně vzájemně synchronizují. Při editaci v tabulce probíhají správně i validace (tedy zvětšování prvého písmena u křestního jména a zákaz některých příjmení);
  • můžeme dokonce editovat více položek najednou: označíme-li v tabulce více řádků a pak některý z atributů změníme, promítne se tato změna do všech zvolených objektů;
  • dokonce takto korektně funguje i tlačítko "Go China" – označíme-li více řádků v tabulce (s týmž křestním jménem) a tlačítko stiskneme, rozešle se zpráva goChinaWith: všem odpovídajícím objektům.

Za povšimnutí stojí to, že pokud je označeno více objektů, jež mají některé atributy shodné, kontrolér to "pozná" a odpovídající prvek grafického uživatelského rozhraní namísto zástupné hodnoty "Multiple Values" zobrazí skutečnou společnou hodnotu – na následujícím obrázku se to týká rozměrů a křestního jména:

Pokud bychom snad o tuto službu nestáli, můžeme ji právě vypnout nastavením přepínače "Always uses multiple value markers" v atributech kontroléru.

Na pětiminutovou práci to není tak úplně špatné, že ne? Je-li snad mezi čtenáři někdo, komu se systém vazeb nelíbí, může sednout, a napsat klasicky kontrolér, jenž všechny tyto služby zajistí tradičním způsobem prostřednictvím protokolů datových zdrojů a delegátů... A to jsme teprve začali; příště si ukážeme další možnosti.

Pokud by se snad někomu nedařilo, hotový projekt obsahující všechny popsané služby nalezne na www.ocs.cz/apps/KVOTest2.zip.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: