Nastal čas na kakao - Drobná vylepšení a zdokonalení... - 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

 

Jaký fotograf/ka získal/a cenu za nejpopulárnější příspěvek v Nikon Photo Contest?

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

Seriály

Více seriálů



Začínáme s

Nastal čas na kakao - Drobná vylepšení a zdokonalení...

9. prosince 2004, 00.00 | Minule jsme naši aplikaci dokončili, takže vše funguje; slíbili jsme si ale, že si ještě ukážeme několik fint a drobností, jež vylepší její uživatelský komfort.

Minule jsme naši aplikaci dokončili, takže vše funguje; slíbili jsme si ale, že si ještě ukážeme několik fint a drobností, jež vylepší její uživatelský komfort.

Automatická aktivace/deaktivace tlačítka "Add"

První může být to, že by bylo jistě mnohem pohodlnější moci pro vložení nového URL jen zapsat požadovaný text do patřičného textového pole a stisknout Enter, aniž by pak bylo ještě zapotřebí klepat na tlačítko "Add". My jsme ovšem v Cocoa, a tam jsou podobné věci dětsky snadné: prostě opět použijeme mechanismus akce/cíl. S přepínačem ctrl "natáhneme drát" z textového pole na tlačítko "Add", a v inspektoru (který se automaticky přepne do režimu "Connections") zvolíme pro target zprávu performClick:

Ještě je třeba si v inspektoru atributů ověřit, zda textové pole posílá svou action jen po stisknutí klávesy Enter, a ne kdykoli jej opustí kursor (tedy ne "End editing") – jinak bychom po změně obsahu pole a stisknutí tlačítka samozřejmě URL vkládali dvakrát.

Bylo by jistě také šikovné, kdyby tlačítko "Add" bylo aktivní pouze obsahuje-li textové pole validní URL. To bez programování zajistit nelze (později, až si budeme ukazovat různé konkrétní třídy z frameworku Foundation, aplikaci rozšíříme tak, aby to uměla); můžeme však velmi jednoduše využít "bindings" alespoň k tomu, aby tlačítko bylo neaktivní je-li textové pole prázdné. Stačí využít vazbu "enabled" a tzv. Value Transformer. Ten, který se jmenuje NSIsNotNil se, jak jeho jméno naznačuje, prostě postará o to, aby tlačítko bylo "enabled" právě tehdy, když zvolená vazba – tedy hodnota s klíčem "LastURL" z uživatelských předvoleb – není nil:

Skrývání nepotřebných částí GUI

Pojďme dále: už minule jsme si ukázali jednu nepříjemnou vlastnost až dosud sestaveného uživatelského rozhraní – pokud tlačítkem "Delete" odstraníme všechny objekty RSS (tedy z hlediska GUI všechny položky z rozevírací nabídky), objeví se nám v nabídce jakési nesmyslné číslo. Zkusme se zamyslet nad základní příčinou celého problému: jistě, jde o to, že pokud není k dispozici ani jediný objekt RSS, nemají objekty uživatelského rozhraní vyjma textového pole pro URL nahoře a tlačítka "Add" dobrý smysl. Pojďme je tedy v takovém případě skrýt!

Nejjednodušší je spojit všechny objekty do jednoho nadřízeného "balíčku" (a pro něj pak patřičným způsobem nastavit "binding"). Nejprve objekty označíme – nejpohodlnější je asi klasické tažení myší:

Pak použijeme příkaz "Layout / Make Subviews of / Custom View" a v inspektoru "Size" se postaráme o správné nastavení "drátů a pružin", aby se celé nadřízené "view" zmenšovalo a zvětšovalo s oknem – to vidíme na levém obrázku dole:

Přepneme inspektor do režimu "Bindings" a postaráme se o to, aby se nadřízené "view" podle potřeby automaticky skrývalo a objevovalo (obrázek vpravo nahoře). Nejjednodušší je použít malou fintu: součástí nabídky pro "Controller Key" je metoda canRemove, jež vrací "ano" pokud je k dispozici nějaký objekt, jenž lze smazat, a "ne" pakliže tomu tak není. Je vidět, že pro atribut "hidden", který určujeme, je to vlastně to co chceme – jen naopak, pro "ano, lze rušit" chceme "ne, neskrývat", a pro "ne, není co rušit" chceme "ano, skrýt". Proto použijeme opět Value Transformer, tentokrát ten, který se jmenuje NSNegateBoolean a také prostě neguje booleovskou hodnotu.

Nu, a to je vše: nyní budou grafické prvky v dolní části okna zobrazeny pouze v případě, že kontrolér "RSS Controller" obsahuje nějaký objekt: smažme všechny tlačítkem "Delete", a ovládací prvky se skryjí; přidejme nový tlačítkem "Add", a opět se objeví.

Chceme-li uživatelskou přívětivost aplikace ještě trochu vylepšit, můžeme samozřejmě do jejího okna uložit obyčejný textový objekt (třeba "System Font Text"), napsat do něj něco ve smyslu "Not applicable – add some objects using the 'Add' button" a nastavit jeho atribut "hidden" stejně, ale bez NSNegateBoolean: pak samozřejmě v době, kdy jsou skryty prvky uživatelského rozhraní, bude vidět tento text – a naopak.

Zobrazení chybových stavů

Chyby se nám automaticky zobrazují v tabulce; bylo by ale hezké je nějak zvýraznit; také se někomu nemusí líbit to, že pokud se nějaká chyba v tabulce zobrazí, nevidíme nic v textovém objektu v dolní části. Oba problémy můžeme – chceme-li – snadno vyřešit pomocí "bindings"; obě založíme na prázdné hodnotě atributu "description".

Pro tabulku navážeme třeba atribut "fontBold":

Pro textové pole použijeme možnost systému "bindings" o níž jsme se dosud nebavili: jde o to, že pro různé "nekorektní" situace můžeme určit zástupné hodnoty (placeholders), jež se použijí pokud k dané situaci dojde. Otevřeme proto u textového objektu "binding" pro atribut "value", a v něm nastavíme vhodný "placeholder" pro situaci, kdy je v navázané hodnotě Null:

Na už známém principu pak můžeme třeba také zajistit skrytí textového pole pro URL v případě, že v něm není co zobrazit:

Nakonec titulek okna...

Systém "bindings" je skutečně velice flexibilní a na úrovni uživatelského rozhraní a kontrolerů s ním můžeme docílit bezmála cokoli: na rozloučenou si ještě ukážeme, jak zařídit, aby titulek okna namísto nicneříkajícího "RSS2" obsahoval název aktuálně vybraného streamu RSS:

Samozřejmě, že aplikaci můžeme dále vylepšovat a zdokonalovat – některé možnosti si ještě ukážeme později, až se budeme zabývat konkrétními třídami Foundation a AppKitu – prozatím nám však to, co jsme naprogramovali, bohatě stačí. A mimochodem, pokud se snad někomu z jakéhokoli důvodu nepodařilo projekt správně sestavit, podívejte se na www.ocs.cz/apps/RSS2.zip.

Příště se ještě na chvilku vrátíme k XCode, abychom si ukázali základy ladění, a pak už nás čeká Foundation Kit, přehled jeho služeb a podrobnější ukázka a vysvětlení těch nejzajímavějších z nich.

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

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Začínáme s  

 

 

 

 

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

Uživatelské jméno:

Heslo: