Převodníky, přepínače, placeholdery - 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:

Seriály

Více seriálů



Software

Převodníky, přepínače, placeholdery

1. srpna 2006, 00.00 | Slíbili jsme si, že si konečně vysvětlíme všechny ty podivné atributy a přepínače vazeb, jež máme k dispozici v inspektoru vazeb pod ovladači "Bind to" / "Controller Key" / "Model Key Path": o některých z nich jsme si sice už něco málo řekli (už například rozumíme přepínači "Continuously updates value"), ale většina z nich zůstává poněkud záhadou.

Předminule jsme změnili triviální NSObjectController na NSArrayController, jenž nám umožňuje pracovat s více datovými objekty v modelu; minule jsme na nový kontrolér navázali dvě tlačítka a tři sloupce tabulky, a s překvapením jsme zjistili, že výsledkem byla aplikace docela funkční a s poměrně bohatou sadou služeb.

Slíbili jsme si také, že si konečně vysvětlíme všechny ty podivné atributy a přepínače vazeb, jež máme k dispozici v inspektoru vazeb pod ovladači "Bind to" / "Controller Key" / "Model Key Path": o některých z nich jsme si sice už něco málo řekli (už například rozumíme přepínači "Continuously updates value"), ale většina z nich zůstává poněkud záhadou.

Value Transformer

Ačkoli konkrétní skupina možností a přepínačů, jež jsou nám k dispozici, se pro různé vazby poněkud liší, "Value Transformer" mají všechny.

My již ale převodníky hodnot dobře známe a naučili jsme se i vytvářet vlastní: do textového pole prostě zadáme jméno, pod nímž byl převodník zaregistrován příkazem

[NSValueTransformer setValueTransformer:... forName:...]

Cocoa standardně nabízí následující převodníky:

  • NSNegateBooleanTransformer: s tímto převodníkem jsme se již setkali; převede hodnotu NO (tedy v kontextu jazyka C cokoli nulového) na YES (tedy hodnotu nenulovou) a naopak. Hodí se kdykoli chceme určovat kupříkladu přístupnost prvků uživatelského rozhraní, a máme zrovna náhodou k dispozici pouze opačnou hodnotu (tedy "ano" právě když prvek přístupný být nemá a vice versa);
  • NSIsNilTransformer: prostě a jednoduše převede nil na YES a jakýkoli existující objekt na NO; v praxi se hodí v podobných případech jako ten minulý – tedy určujeme-li přístupnost prvků GUI, tentokrát ale na základě existence či neexistence objektů;
  • NSIsNotNilTransformer: obyčejná negace toho minulého; nebyl by zapotřebí, kdybychom mohli převodníky hodnot řetězit;
  • NSUnarchiveFromDataTransformer: po cestě "tam" je jeho vstupním typem objekt třídy NSData, a převodník získá výsledek tak, že na data "pustí" standardní dearchivaci. Funguje i na druhou stranu; pak naopak libovolný objekt zaarchivuje a vrátí výsledná data. Nejčastěji jej využijeme při vazbách na NSUserDefaultsController, kdy nám umožňuje do aplikačních předvoleb přímo ukládat objekty typu NSFont či NSColor.

Přepínače

Panely pro nastavování vazeb nabízejí řadu přepínačů. U každé z vazeb jsou přepínače trochu odlišné; s některými jsme se již seznámili – např. víme, že zapneme-li přepínač "Continuously updates value", bude prvek grafického uživatelského rozhraní, jehož vazbu nastavujeme, odesílat změny navázané hodnoty patřičnému kontroléru ihned; ponecháme-li jej vypnutý, odešle změny až při ukončení editace.

Další častěji užívané přepínače jsou

  • Allows Editing Multiple Values Selection: zde si musíme připomenout speciální zástupný objekt, který kontroléry nabízejí v atributu "selection": ten representuje všechny označené objekty, a nabízí přístup k jejich atributům. Pokud tento přepínač zapneme, zástupný objekt umožní editaci daného atributu více objektů najednou (nová hodnota se prostě uloží do všech); vypneme-li jej, nebude to možné, a objekty budeme moci editovat pouze jeden po druhém;
  • Conditionally Sets Editable: velmi často užívaný atribut; automaticky řídí možnost editace podle toho, které objekty jsou vybrány, a editaci umožní pouze v případě, že to dává smysl;
  • Conditionally Sets Enabled/Hidden: alternativní verse minulého přepínače, jež namísto atributu "editable" řídí atribut "enabled", případně ovladač zcela skrývají;
  • Inserts Null Placeholder: velmi šikovný přepínač v případě, že užíváme vazby pro vyplnění rozevírací nabídky, jež má mít stálý a neměnný titulek – pokud jej zapneme, vazba automaticky před "skutečné" hodnoty vloží nil (který rozevírací nabídka právě dokáže nahradit stálým titulkem);

Kromě toho samozřejmě některé vazby nabízejí další přepínače; na jejich podrobný popis už ale v tomto přehledném článku není místo; v praxi se s nimi stejně setkáme poměrně málokdy.

Zástupné hodnoty

Především se omlouvám čtenářům za užití ohavného anglicismu "placeholdery" v titulku tohoto článku; nedokázal jsem však odolat roztomilé aliteraci.

Ohledně smyslu a užití zástupných hodnot ("placeholders") si opět připomeňme funkci atributu "selection": jeho obsahem nejsou přímo vybrané datové objekty modelu (ty můžeme, chceme-li, získat prostřednictvím atributu "selectedObjects"), nýbrž chytrý pomocný objekt, který podle potřeby zpřístupňuje atributy vybraných datových objektů.

Pomocný objekt "selection" přitom ale může zjistit, že atributy vybraných datových objektů zpřístupnit nelze, neboť

  • je vybraných objektů více. Pomocný objekt "selection" se v takovém případě ještě pokusí zjistit, zda náhodou nemají všechny touž hodnotu daného atributu (není-li to zakázáno pomocí přepínače "Always uses multiple value markers", s nímž jsme se seznámili minule) – pak ji může vrátit; v opačném případě však namísto toho vrátí speciální zástupnou hodnotu, jejíž význam je "více vybraných objektů";
  • není vybrán žádný datový objekt. Pak samozřejmě pomocný objekt "selection" nemá na vybranou, a nemůže než vrátit jinou speciální zástupnou hodnotu, jejíž význam je "nic není vybráno";
  • některý z vybraných datových objektů vůbec nemá patřičný atribut (tj. ne že by jeho hodnota byla prázdná, ale vůbec neexistuje – datový objekt dané jméno atributu vůbec nepodporuje, a pokus získat s tímto jménem hodnotu pomocí zprávy valueForKey: vyvolá výjimku). V takovém případě pomocný objekt "selection" buď výjimku předá dále (je-li zapnutý přepínač "Raises for Not Applicable Keys", který již známe dávno), nebo ji naopak "spolkne" a vrátí další speciální zástupnou hodnotu, jejíž význam je "vybrané objekty nepodporují zvolený atribut".

Objekty grafického uživatelského rozhraní dokáží na tyto speciální zástupné hodnoty patřičně reagovat, a my pro ně můžeme určit, co se má zobrazit – kupříkladu "pokud je vybráno více objektů s různými hodnotami atributu, napiš do textového pole 'Změna se projeví ve všech vybraných objektech'". K tomu právě slouží čtveřice textových polí "... Placeholder" v editoru vazeb.

Tak tedy cokoli, co zapíšeme do textového pole "Multiple Values Placeholder", objekt GUI použije právě v případě, kdy od kontroléru (respektive od jeho pomocného objektu "selection") dostane speciální zástupnou hodnotu, jejíž význam je "více vybraných objektů". Případný text, který uložíme do textového pole "No Selection Placeholder", se použije právě tehdy, kdy kontrolér vrátí speciální zástupnou hodnotu "nic není vybráno". Konečně obsah textového pole "Not Applicable Placeholder" bude objektem grafického uživatelského rozhraní použit v případě, kdy mu kontrolér vrátí speciální zástupnou hodnotu, jejíž význam je "vybrané objekty nepodporují zvolený atribut".

Čtvrté z "placeholderových" textových polí má malinko jiné postavení – není vázáno na žádnou speciální zástupnou hodnotu, již by kontrolér vracel –, ale v praxi se hodí neméně často (spíše ještě častěji): ono se totiž může stát, že daný atribut vybraného datového objektu sice existuje, avšak žádnou hodnotu nemá (jinými slovy, zpráva valueForKey: pro tento atribut vrátí hodnotu nil). To je zcela normální, korektní situace, a kontrolér se o ni nijak zvlášť nestará – jeho zástupný objekt "selection" prostě také vrátí nil a je to. Naproti tomu, velice často se nám hodí na úrovni grafického uživatelského rozhraní "prázdnou" hodnotu nil zobrazit nějakým speciálním způsobem – a k tomu právě slouží čtvrté, poslední textové pole "Null Placeholder": jeho obsah objekt GUI použije právě tehdy, když v rámci dané vazby dostane od kontroléru hodnotu nil. Obvykle do tohoto pole zapisujeme něco jako "-- beze jména --" a podobně.

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

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

 

 

 

Nejčtenější články
Nejlépe hodnocené články
Apple kurzy

 

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

Uživatelské jméno:

Heslo: