Práce se scénáři v Xamarin.Mac
Scénář definuje veškeré uživatelské rozhraní pro danou aplikaci rozdělené do funkčního přehledu kontrolerů zobrazení. V Tvůrci rozhraní Xcode každý z těchto kontrolerů žije ve své vlastní scéně.
Storyboard je soubor prostředků (s příponami .storyboard
), který se při kompilaci a odeslání zahrne do sady aplikace Xamarin.Mac. Pokud chcete definovat počáteční scénář pro vaši aplikaci, upravte ho Info.plist
a v rozevíracím seznamu vyberte Hlavní rozhraní :
Načítání z kódu
Někdy může docházet k tomu, že potřebujete načíst konkrétní scénář z kódu a vytvořit kontroler zobrazení ručně. K provedení této akce můžete použít následující kód:
// Get new window
var storyboard = NSStoryboard.FromName ("Main", null);
var controller = storyboard.InstantiateControllerWithIdentifier ("MainWindow") as NSWindowController;
// Display
controller.ShowWindow(this);
Načte FromName
soubor Storyboard se zadaným názvem, který je součástí sady aplikací. Vytvoří InstantiateControllerWithIdentifier
instanci kontroleru zobrazení s danou identitou. Identitu nastavíte v Tvůrci rozhraní Xcode při návrhu uživatelského rozhraní:
Volitelně můžete použít metodu InstantiateInitialController
k načtení kontroleru zobrazení, který byl přiřazen počáteční kontroler v Tvůrci rozhraní:
Je označen vstupním bodem storyboardu a otevřenou šipkou ukončenou nad ní.
Zobrazit kontrolery
Kontrolery zobrazení definují vztahy mezi daným zobrazením informací v aplikaci pro Mac a datovým modelem, který poskytuje příslušné informace. Každá scéna nejvyšší úrovně ve storyboardu představuje jeden kontroler zobrazení v kódu aplikace Xamarin.Mac.
Životní cyklus kontroleru zobrazení
Do NSViewController
třídy bylo přidáno několik nových metod, které podporují scénáře v macOS. Nejdůležitější jsou následující metody, které slouží k reakci na životní cyklus zobrazení řízeného daným kontrolerem zobrazení:
ViewDidLoad
- Tato metoda je volána při načtení zobrazení ze souboru Storyboard.ViewWillAppear
- Tato metoda se volá těsně před zobrazením na obrazovce.ViewDidAppear
- Tato metoda se volá přímo po zobrazení na obrazovce.ViewWillDisappear
- Tato metoda se volá těsně před odebráním zobrazení z obrazovky.ViewDidDisappear
- Tato metoda se volá přímo po odebrání zobrazení z obrazovky.UpdateViewConstraints
– Tato metoda se volá, když je potřeba aktualizovat omezení, která definují umístění a velikost zobrazení automatického rozložení.ViewWillLayout
- Tato metoda se nazývá těsně před zobrazením tohoto zobrazení jsou rozloženy na obrazovce.ViewDidLayout
- Tato metoda je volána přímo po zobrazení zobrazení jsou rozloženy na obrazovce.
Řetězec respondéru
Kromě toho NSViewControllers
jsou teď součástí řetězce respondéru okna:
A jako takové jsou připojeny k příjmu a odpovídání na události, jako jsou výběry položek nabídky Vyjmout, Kopírovat a Vložit. K tomuto automatickému připojení kontroleru zobrazení dochází pouze u aplikací spuštěných v systému macOS Sierra (10.12) a novějších.
Uzavření
Ve scénářích teď můžou kontrolery zobrazení (například rozdělit kontroler zobrazení a kontroler zobrazení karet) implementovat zahrnutí, aby mohly obsahovat další dílčí kontrolery zobrazení:
Podřízené kontrolery zobrazení obsahují metody a vlastnosti, které je provázají zpět s nadřazeným kontrolerem zobrazení a pracují se zobrazením a odebráním zobrazení z obrazovky.
Všechny kontrolery zobrazení kontejnerů integrované v systému macOS mají specifické rozložení, které Apple doporučuje, abyste postupovali, pokud vytváříte vlastní kontrolery zobrazení kontejnerů:
Kontroler zobrazení kolekce obsahuje pole položek zobrazení kolekce, z nichž každá obsahuje jeden nebo více kontrolerů zobrazení, které obsahují vlastní zobrazení.
Segues
Segues poskytuje vztahy mezi všemi scénami, které definují uživatelské rozhraní vaší aplikace. Pokud znáte práci ve scénářích v iOSu, víte, že segues pro iOS obvykle definují přechody mezi zobrazeními na celé obrazovce. To se liší od macOS, když Segues obvykle definuje "Zahrnutí", kde jedna scéna je podřízená nadřazené scéně.
V systému macOS většina aplikací obvykle seskupuje svá zobrazení do stejného okna pomocí prvků uživatelského rozhraní, jako jsou rozdělení zobrazení a tabulátory. Na rozdíl od iOSu, kde je potřeba přecházet na i mimo obrazovku, kvůli omezenému fyzickému prostoru pro zobrazení.
Prezentační segues
Vzhledem k tomu, že macOS má tendenci k blokování, existují situace, kdy se používají prezentační segues , jako jsou modální okna, zobrazení listů a překryvná okna. macOS poskytuje následující předdefinované typy segue:
- Show - Zobrazí cíl segue jako nemodální okno. Tento typ Segue můžete například použít k prezentaci jiné instance okna dokumentu ve vaší aplikaci.
- Modální - Představuje cíl Segue jako modální okno. Pomocí tohoto typu segue můžete například prezentovat okno Předvoleb pro vaši aplikaci.
- List – představuje cíl segue jako list připojený k nadřazeným oknem. Pomocí tohoto typu segue můžete například prezentovat list Najít a nahradit.
- Popover - Prezentuje cíl Segue jako v automaticky otevírané okno. Pomocí tohoto typu Segue můžete například prezentovat možnosti, když uživatel klikne na prvek uživatelského rozhraní.
- Vlastní – představuje cíl segue pomocí vlastního typu Segue definovaného vývojářem. Další podrobnosti najdete v části Vytváření vlastních segues níže.
Při použití prezentační segues můžete přepsat PrepareForSegue
metodu nadřazeného kontroleru zobrazení pro prezentaci, aby inicializovala a proměnné a poskytla všechna data kontroleru zobrazení, který se prezentuje.
Aktivované segues
Triggered Segues umožňuje zadat pojmenované Segues (prostřednictvím vlastnosti Identifikátor v Interface Builderu) a nechat je aktivovat událostmi, jako je uživatel, který klikne na tlačítko nebo zavolá metodu PerformSegue
v kódu:
// Display the Scene defined by the given Segue ID
PerformSegue("MyNamedSegue", this);
Id Segue se definuje uvnitř Tvůrce rozhraní Xcode při rozložení uživatelského rozhraní aplikace:
V zobrazení kontroleru, který funguje jako zdroj Segue, byste měli přepsat PrepareForSegue
metodu a provést jakékoli inicializace požadované před spuštěním Segue a zadaný kontroler zobrazení se zobrazí:
public override void PrepareForSegue (NSStoryboardSegue segue, NSObject sender)
{
base.PrepareForSegue (segue, sender);
// Take action based on Segue ID
switch (segue.Identifier) {
case "MyNamedSegue":
// Prepare for the segue to happen
...
break;
}
}
Volitelně můžete přepsat metodu ShouldPerformSegue
a řídit, zda se Segue skutečně provádí prostřednictvím kódu jazyka C#. U ručně prezentovaných kontrolerů zobrazení zavolejte metodu DismissController
, která je odebere ze zobrazení, když už nejsou potřeba.
Vytváření vlastních segues
Někdy může docházet k tomu, že vaše aplikace vyžaduje typ Segue, který není poskytovaný buildem Segues definovaným v systému macOS. V takovém případě můžete vytvořit vlastní segue, který se dá přiřadit v Tvůrci rozhraní Xcode při rozložení uživatelského rozhraní vaší aplikace.
Pokud například chcete vytvořit nový typ Segue, který nahradí aktuální kontroler zobrazení uvnitř okna (místo otevření cílové scény v novém okně), můžeme použít následující kód:
using System;
using AppKit;
using Foundation;
namespace OnCardMac
{
[Register("ReplaceViewSeque")]
public class ReplaceViewSeque : NSStoryboardSegue
{
#region Constructors
public ReplaceViewSeque() {
}
public ReplaceViewSeque (string identifier, NSObject sourceController, NSObject destinationController) : base(identifier,sourceController,destinationController) {
}
public ReplaceViewSeque (IntPtr handle) : base(handle) {
}
public ReplaceViewSeque (NSObjectFlag x) : base(x) {
}
#endregion
#region Override Methods
public override void Perform ()
{
// Cast the source and destination controllers
var source = SourceController as NSViewController;
var destination = DestinationController as NSViewController;
// Swap the controllers
source.View.Window.ContentViewController = destination;
// Release memory
source.RemoveFromParentViewController ();
}
#endregion
}
}
Tady je pár věcí, které je potřeba poznamenat:
- K zveřejnění této třídy Objective-Cpro /macOS používáme
Register
atribut. - Přepíšeme metodu
Perform
, abychom skutečně provedli akci vlastní segue. - Kontroler okna
ContentViewController
nahrazujeme kontrolerem definovaným cílem (cílem) segue. - Odebíráme původní kontroler zobrazení, aby se uvolnila paměť pomocí
RemoveFromParentViewController
metody.
Abychom mohli použít tento nový typ Segue v Tvůrci rozhraní Xcode, musíme nejprve zkompilovat aplikaci, pak přepnout na Xcode a přidat nový Segue mezi dvě scény. Nastavte styl na vlastní a třídu Segue na ReplaceViewSegue
(název naší vlastní třídy Segue):
Kontrolery oken
Kontrolery oken obsahují a řídí různé typy oken, které může aplikace pro macOS vytvořit. Pro scénáře mají následující funkce:
- Musí poskytnout kontroler zobrazení obsahu. Bude to stejný kontroler zobrazení obsahu, který má podřízené okno.
- Vlastnost
Storyboard
bude obsahovat storyboard, ze kterého byl načten kontroler oken, jinaknull
pokud není načten z storyboardu. - Metodu můžete volat,
DismissController
abyste zavřeli dané okno a odebrali ho ze zobrazení.
Podobně jako kontrolery zobrazení implementují PerformSegue
PrepareForSegue
kontrolery oken a ShouldPerformSegue
metody a lze je použít jako zdroj operace Segue.
Správce oken zodpovídá za následující funkce aplikace pro macOS:
- Spravují konkrétní okno.
- Spravují záhlaví a panel nástrojů okna (pokud jsou k dispozici).
- Spravují kontroler zobrazení obsahu, aby zobrazily obsah okna.
Rozpoznávání gest
Rozpoznávání gest pro macOS je téměř stejné jako jejich protějšky v iOSu a umožňuje vývojářům snadno přidávat gesta (například kliknutí na tlačítko myši) k prvkům v uživatelském rozhraní vaší aplikace.
Pokud jsou však gesta v iOSu určena návrhem aplikace (například klepnutím na obrazovku dvěma prsty), většina gest v systému macOS je určena hardwarem.
Pomocí rozpoznávání gest můžete výrazně snížit množství kódu potřebného k přidání vlastních interakcí do položky v uživatelském rozhraní. Jak mohou automaticky určit mezi dvojitým a jedním kliknutím, klikněte a přetáhněte události atd.
Místo přepsání MouseDown
události v kontroleru zobrazení byste při práci se scénáři měli použít rozpoznávání gest ke zpracování události vstupu uživatele.
V systému macOS jsou k dispozici následující nástroje pro rozpoznávání gest:
NSClickGestureRecognizer
- Zaregistrujte události myši dolů a nahoru.NSPanGestureRecognizer
- Zaregistruje tlačítko myši dolů, přetáhněte a uvolněte události.NSPressGestureRecognizer
- Zaregistruje se podržení tlačítka myši na danou dobu.NSMagnificationGestureRecognizer
- Zaregistruje událost zvětšení z hardwaru trackpadu.NSRotationGestureRecognizer
- Zaregistruje událost rotace z hardwaru trackpadu.
Použití odkazů na storyboard
Referenční informace ke storyboardu vám umožní vzít velký, složitý návrh scénáře a rozdělit ho na menší scénáře, na které se odkazuje z původního textu, a tím usnadnit návrh a údržbu výsledných jednotlivých scénářů.
Kromě toho může odkaz na storyboard poskytnout ukotvení k jiné scéně v rámci stejné scénáře nebo konkrétní scény na jiném místě.
Odkazování na externí scénář
Pokud chcete přidat odkaz na externí storyboard, postupujte takto:
V Průzkumník řešení klikněte pravým tlačítkem na název projektu a vyberte Přidat>nový soubor...>>Mac Storyboard. Zadejte název nové scénáře a klikněte na tlačítko Nový:
V Průzkumník řešení poklikejte na nový název scénáře a otevřete ho pro úpravy v Tvůrci rozhraní Xcode.
Navrhněte rozložení scén nové storyboardu tak, jak byste normálně chtěli, a uložte změny:
Přepněte na storyboard, do kterého budete přidávat odkaz v Tvůrci rozhraní.
Přetáhněte odkaz na storyboard z knihovny objektů na návrhovou plochu:
V inspektoru atributů vyberte název scénáře, který jste vytvořili výše:
Control-click on a UI Widget (like a Button) on an existing Scene and create a new Segue to the Storyboard Reference , kterou jste právě vytvořili. V místní nabídce vyberte Zobrazit , abyste dokončili segue:
Uložte změny do scénáře.
Vraťte se do Visual Studio pro Mac, abyste synchronizovali změny.
Když se aplikace spustí a uživatel klikne na prvek uživatelského rozhraní, ze kterého jste vytvořili Segue, zobrazí se počáteční kontroler okna z externího scénáře určeného v odkazu na scénář.
Odkazování na konkrétní scénu v externí scénáře
Pokud chcete přidat odkaz na konkrétní scénu, externí scénář (nikoli počáteční kontroler okna), postupujte takto:
V Průzkumník řešení poklikáním otevřete externí storyboard pro úpravy v Tvůrci rozhraní Xcode.
Přidejte novou scénu a vytvořte její rozložení tak, jak byste normálně chtěli:
V nástroji Identity Inspector zadejte ID scénáře pro kontroler oken nové scény:
Otevřete storyboard, do kterého budete přidávat odkaz v Tvůrci rozhraní.
Přetáhněte odkaz na storyboard z knihovny objektů na návrhovou plochu:
V nástroji Identity Inspector vyberte název scénáře a ID reference (ID scénáře) scény, kterou jste vytvořili výše:
Control-click on a UI Widget (like a Button) on an existing Scene and create a new Segue to the Storyboard Reference , kterou jste právě vytvořili. V místní nabídce vyberte Zobrazit , abyste dokončili segue:
Uložte změny do scénáře.
Vraťte se do Visual Studio pro Mac, abyste synchronizovali změny.
Když se aplikace spustí a uživatel klikne na prvek uživatelského rozhraní, ze kterého jste vytvořili Segue, zobrazí se scéna s daným ID scénáře z externího scénáře zadaného v odkazu na scénář.
Odkazování na konkrétní scénu ve stejné scénáři
Pokud chcete přidat odkaz na konkrétní scénu, která má stejnou scénář, postupujte takto:
V Průzkumník řešení poklikáním otevřete storyboard pro úpravy.
Přidejte novou scénu a vytvořte její rozložení tak, jak byste normálně chtěli:
V nástroji Identity Inspector zadejte ID scénáře pro kontroler oken nové scény:
Přetáhněte odkaz na storyboard z panelu nástrojů na návrhovou plochu:
V inspektoru atributů vyberte REFERENČNÍ ID (ID scénáře) scény, kterou jste vytvořili výše:
Control-click on a UI Widget (like a Button) on an existing Scene and create a new Segue to the Storyboard Reference , kterou jste právě vytvořili. V místní nabídce vyberte Zobrazit , abyste dokončili segue:
Uložte změny do scénáře.
Vraťte se do Visual Studio pro Mac, abyste synchronizovali změny.
Když se aplikace spustí a uživatel klikne na prvek uživatelského rozhraní, ze kterého jste vytvořili Segue, zobrazí se scéna s daným ID scénáře ve stejné storyboardu zadaném v odkazu na storyboard.