Praca z scenorysami na platformie Xamarin.Mac
Scenorys definiuje cały interfejs użytkownika dla danej aplikacji podzielony na funkcjonalny przegląd kontrolerów widoku. W narzędziu Interface Builder programu Xcode każdy z tych kontrolerów mieszka we własnej scenie.
Scenorys jest plikiem zasobów (z rozszerzeniami .storyboard
) dołączonym do pakietu aplikacji Xamarin.Mac podczas kompilowania i wysłania. Aby zdefiniować początkowy scenorys dla aplikacji, zmodyfikuj go Info.plist
i wybierz główny interfejs z pola listy rozwijanej:
Ładowanie z kodu
Czasami konieczne może być załadowanie określonego scenorysu z kodu i ręczne utworzenie kontrolera widoku. Aby wykonać tę akcję, możesz użyć następującego kodu:
// Get new window
var storyboard = NSStoryboard.FromName ("Main", null);
var controller = storyboard.InstantiateControllerWithIdentifier ("MainWindow") as NSWindowController;
// Display
controller.ShowWindow(this);
Ładuje FromName
plik Storyboard o podanej nazwie, która została uwzględniona w pakiecie aplikacji. Obiekt InstantiateControllerWithIdentifier
tworzy wystąpienie kontrolera widoku z daną tożsamością. Tożsamość można ustawić w narzędziu Interface Builder programu Xcode podczas projektowania interfejsu użytkownika:
Opcjonalnie możesz użyć InstantiateInitialController
metody , aby załadować kontroler widoku, który został przypisany kontroler początkowy w konstruktorze interfejsu:
Jest ona oznaczona przez punkt wejścia scenorysu i otwartą strzałkę zakończoną powyżej.
Wyświetlanie kontrolerów
Kontrolery widoku definiują relacje między danym widokiem informacji w aplikacji dla komputerów Mac i modelem danych, który udostępnia te informacje. Każda scena najwyższego poziomu w scenie Scenorysu reprezentuje jeden kontroler widoku w kodzie aplikacji Xamarin.Mac.
Cykl życia kontrolera widoku
Do klasy dodano NSViewController
kilka nowych metod do obsługi scenorysów w systemie macOS. Najważniejsze są następujące metody używane do reagowania na cykl życia widoku kontrolowanego przez dany kontroler widoku:
ViewDidLoad
— Ta metoda jest wywoływana, gdy widok jest ładowany z pliku Scenorysu.ViewWillAppear
- Ta metoda jest wywoływana tuż przed wyświetleniem widoku na ekranie.ViewDidAppear
- Ta metoda jest wywoływana bezpośrednio po wyświetleniu widoku na ekranie.ViewWillDisappear
— Ta metoda jest wywoływana tuż przed usunięciem widoku z ekranu.ViewDidDisappear
— Ta metoda jest wywoływana bezpośrednio po usunięciu widoku z ekranu.UpdateViewConstraints
— Ta metoda jest wywoływana, gdy ograniczenia definiujące położenie i rozmiar układu automatycznego widoku muszą zostać zaktualizowane.ViewWillLayout
— Ta metoda jest wywoływana tuż przed układem podpoglądów tego widoku na ekranie.ViewDidLayout
— Ta metoda jest wywoływana bezpośrednio po ułożeniu widoków podrzędnych na ekranie.
Łańcuch odpowiedzi
NSViewControllers
Ponadto są teraz częścią łańcucha odpowiedzi okna:
W związku z tym są one połączone w celu odbierania i reagowania na zdarzenia, takie jak wybieranie elementów menu Wycinanie, kopiowanie i wklejanie. To automatyczne połączenie kontrolera widoku występuje tylko w aplikacjach działających w systemie macOS Sierra (10.12) i nowszych.
Zamknięcia
W scenorysach kontrolery widoku (takie jak kontroler widoku podzielonego i kontroler widoku karty) mogą teraz implementować zawieranie, tak aby mogły "zawierać" inne kontrolery widoku podrzędnego:
Kontrolery widoku podrzędnego zawierają metody i właściwości, aby powiązać je z powrotem z kontrolerem widoku nadrzędnego i pracować z wyświetlaniem i usuwaniem widoków z ekranu.
Wszystkie kontrolery widoku kontenera wbudowane w system macOS mają określony układ, który firma Apple sugeruje, że należy wykonać następujące czynności w przypadku tworzenia własnych niestandardowych kontrolerów widoku kontenerów:
Kontroler widoku kolekcji zawiera tablicę elementów widoku kolekcji, z których każdy zawiera jeden lub więcej kontrolerów widoku, które zawierają własne widoki.
Segues
Segues udostępnia relacje między wszystkimi scenami, które definiują interfejs użytkownika aplikacji. Jeśli znasz pracę z scenorysami w systemie iOS, wiesz, że segues dla systemu iOS zwykle definiuje przejścia między widokami pełnoekranowymi. Różni się to od systemu macOS, gdy segues zwykle definiuje "Zawieranie", gdzie jedna scena jest elementem podrzędnym nadrzędnej sceny.
W systemie macOS większość aplikacji zwykle grupuje swoje widoki w tym samym oknie przy użyciu elementów interfejsu użytkownika, takich jak podział widoków i kart. W przeciwieństwie do systemu iOS, gdzie widoki muszą być przenoszone na ekranie i poza nie, ze względu na ograniczoną ilość miejsca do wyświetlania fizycznego.
Segues prezentacji
Biorąc pod uwagę tendencje systemu macOS do powstrzymania, istnieją sytuacje, w których są używane segues prezentacji, takie jak modalne okna, widoki arkuszy i popovery. System macOS udostępnia następujące wbudowane typy segue:
- Show — wyświetla element docelowy segue jako okno niemodalne. Na przykład użyj tego typu programu Segue, aby przedstawić inne wystąpienie okna dokumentu w aplikacji.
- Modalne - przedstawia cel Segue jako modalne okno. Na przykład użyj tego typu programu Segue, aby wyświetlić okno preferencji dla aplikacji.
- Arkusz — przedstawia element docelowy segue jako arkusz dołączony do okna nadrzędnego. Na przykład użyj tego typu segue, aby przedstawić arkusz Znajdź i Zamień.
- Popover - przedstawia cel Segue jak w oknie popover. Na przykład użyj tego typu segue, aby przedstawić opcje po kliknięciu przez użytkownika elementu interfejsu użytkownika.
- Niestandardowe — przedstawia element docelowy segue przy użyciu niestandardowego typu segue zdefiniowanego przez dewelopera. Aby uzyskać więcej informacji, zobacz sekcję Tworzenie segues niestandardowych poniżej.
W przypadku korzystania z aplikacji Presentation Segues można zastąpić PrepareForSegue
metodę nadrzędnego kontrolera widoku na potrzeby prezentacji w celu zainicjowania i zmiennych oraz podania dowolnych danych do prezentowanego kontrolera widoku.
Wyzwolone segues
Wyzwolona segues umożliwia określenie nazwy Segues (za pośrednictwem właściwości Identyfikator w narzędziu Interface Builder) i wyzwolenie ich przez zdarzenia, takie jak kliknięcie przycisku przez użytkownika lub wywołanie PerformSegue
metody w kodzie:
// Display the Scene defined by the given Segue ID
PerformSegue("MyNamedSegue", this);
Identyfikator segue jest zdefiniowany wewnątrz konstruktora interfejsu Xcode podczas układania interfejsu użytkownika aplikacji:
W kontrolerze widoku, który działa jako źródło Segue, należy przesłonić PrepareForSegue
metodę i wykonać wszelkie wymagane inicjowanie przed wykonaniem segue i zostanie wyświetlony określony kontroler widoku:
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;
}
}
Opcjonalnie możesz zastąpić metodę ShouldPerformSegue
i kontrolować, czy segue jest rzeczywiście wykonywany za pomocą kodu języka C#. W przypadku ręcznie przedstawionych kontrolerów widoku wywołaj metodę DismissController
, aby usunąć je z wyświetlania, gdy nie są już potrzebne.
Tworzenie niestandardowych segues
Czasami aplikacja wymaga typu Segue, który nie jest dostarczany przez kompilację segues zdefiniowaną w systemie macOS. W takim przypadku można utworzyć niestandardowy segue, który można przypisać w narzędziu Interface Builder programu Xcode podczas układania interfejsu aplikacji.
Aby na przykład utworzyć nowy typ segue, który zastępuje bieżący kontroler widoku wewnątrz okna (zamiast otwierać docelową scenę w nowym oknie), możemy użyć następującego kodu:
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
}
}
Kilka rzeczy do zanotowania tutaj:
- Używamy atrybutu
Register
, aby uwidocznić tę klasę w Objective-Csystemie /macOS. - Zastępujemy metodę
Perform
, aby rzeczywiście wykonać akcję naszego niestandardowego segue. - Zastępujemy kontroler okna
ContentViewController
elementem zdefiniowanym przez element docelowy (docelowy) segue. - Usuwamy oryginalny kontroler widoku, aby zwolnić pamięć przy użyciu
RemoveFromParentViewController
metody .
Aby użyć tego nowego typu segue w narzędziu Interface Builder programu Xcode, najpierw musimy skompilować aplikację, a następnie przełączyć się na środowisko Xcode i dodać nowy segue między dwiema scenami. Ustaw wartość Styl na Wartość Niestandardowa i Klasa Segue na ReplaceViewSegue
(nazwa naszej niestandardowej klasy Segue):
Kontrolery okien
Kontrolery okien zawierają i kontrolują różne typy okien, które może utworzyć aplikacja systemu macOS. W przypadku scenorysów mają następujące funkcje:
- Muszą podać kontroler widoku zawartości. Będzie to ten sam kontroler widoku zawartości, który ma okno podrzędne.
- Właściwość
Storyboard
będzie zawierać scenorys, z którego został załadowany kontroler okna, w przeciwnym razienull
, jeśli nie zostanie załadowany z scenorysu. - Możesz wywołać metodę
DismissController
, aby zamknąć podane okno i usunąć je z widoku.
Podobnie jak kontrolery widoku, kontrolery okien implementują PerformSegue
metody i PrepareForSegue
ShouldPerformSegue
mogą być używane jako źródło operacji segue.
Kontroler okien jest odpowiedzialny za następujące funkcje aplikacji systemu macOS:
- Zarządzają określonym oknem.
- Zarządzają paskiem tytułu i paskiem narzędzi okna (jeśli są dostępne).
- Zarządzają kontrolerem widoku zawartości, aby wyświetlić zawartość okna.
Rozpoznawanie gestów
Narzędzia rozpoznawania gestów dla systemu macOS są niemal identyczne z ich odpowiednikami w systemie iOS i umożliwiają deweloperowi łatwe dodawanie gestów (takich jak kliknięcie przycisku myszy) do elementów w interfejsie użytkownika aplikacji.
Jednak w przypadku, gdy gesty w systemie iOS są określane przez projekt aplikacji (na przykład naciśnięcie ekranu dwoma palcami), większość gestów w systemie macOS jest określana przez sprzęt.
Za pomocą funkcji rozpoznawania gestów można znacznie zmniejszyć ilość kodu wymaganego do dodania niestandardowych interakcji do elementu w interfejsie użytkownika. Ponieważ mogą automatycznie określać między pojedynczymi i podwójnymi kliknięciami, klikanie i przeciąganie zdarzeń itp.
Zamiast zastępować MouseDown
zdarzenie w kontrolerze widoku, należy użyć aparatu rozpoznawania gestów do obsługi zdarzenia wejściowego użytkownika podczas pracy z scenorysami.
W systemie macOS są dostępne następujące narzędzia rozpoznawania gestów:
NSClickGestureRecognizer
- Zarejestruj myszy w dół i w górę zdarzenia.NSPanGestureRecognizer
- Rejestruje przyciski myszy w dół, przeciągnij i zwolnij zdarzenia.NSPressGestureRecognizer
- Rejestruje przytrzymywanie przycisku myszy w dół dla danego czasu zdarzenia.NSMagnificationGestureRecognizer
— Rejestruje zdarzenie powiększenia ze sprzętu trackpadu.NSRotationGestureRecognizer
- Rejestruje zdarzenie rotacji ze sprzętu trackpadu.
Używanie odwołań do scenorysu
Odwołanie do scenorysu umożliwia utworzenie dużego, złożonego projektu scenorysu i podzielenie go na mniejsze scenorysy, do których odwołuje się oryginalny dokument, dzięki czemu można usunąć złożoność i ułatwić projektowanie i konserwację poszczególnych scenorysów.
Ponadto odwołanie do scenorysu może dostarczyć kotwicę do innej sceny w ramach tego samego sceny lub określonej sceny na innej scenie.
Odwoływanie się do zewnętrznego scenorysu
Aby dodać odwołanie do zewnętrznego scenorysu, wykonaj następujące czynności:
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy nazwę projektu i wybierz polecenie Dodaj>nowy plik...>Scenorys mac>. Wprowadź nazwę nowego scenorysu i kliknij przycisk Nowy:
W Eksplorator rozwiązań kliknij dwukrotnie nową nazwę scenorysu, aby otworzyć ją do edycji w narzędziu Interface Builder programu Xcode.
Zaprojektuj układ scen nowego sceny scen sceny sceny, tak jak zwykle, i zapisz zmiany:
Przejdź do scenorysu, do którego chcesz dodać odwołanie w narzędziu Interface Builder.
Przeciągnij odwołanie do scenorysu z biblioteki obiektów na powierzchnię projektową:
W Inspektorze atrybutów wybierz nazwę scenorysu utworzonego powyżej:
Kliknięcie kontrolki widżetu interfejsu użytkownika (na przykład przycisku) w istniejącej scenie i utworzenie nowego segue'a do właśnie utworzonej dokumentacji scenorysu. Z menu podręcznego wybierz pozycję Pokaż , aby ukończyć segue:
Zapisz zmiany w scenorysie.
Wróć do Visual Studio dla komputerów Mac, aby zsynchronizować zmiany.
Po uruchomieniu aplikacji i kliknięciu przez użytkownika elementu interfejsu użytkownika, z którego utworzono segue, zostanie wyświetlony początkowy kontroler okna z zewnętrznego scenorysu określonego w dokumentacji scenorysu.
Odwoływanie się do określonej sceny w zewnętrznym scenorysie
Aby dodać odwołanie do określonej sceny zewnętrznego sceny (a nie początkowego kontrolera okna), wykonaj następujące czynności:
W Eksplorator rozwiązań kliknij dwukrotnie zewnętrzny scenorys, aby otworzyć go do edycji w narzędziu Interface Builder programu Xcode.
Dodaj nową scenę i zaprojektuj jej układ w zwykły sposób:
W inspektorze tożsamości wprowadź identyfikator scenorysu dla nowego kontrolera okna sceny:
Otwórz scenorys, do którego chcesz dodać odwołanie w narzędziu Interface Builder.
Przeciągnij odwołanie do scenorysu z biblioteki obiektów na powierzchnię projektową:
W inspektorze tożsamości wybierz nazwę sceny iidentyfikator odwołania (identyfikator sceny) utworzonej powyżej sceny:
Kliknięcie kontrolki widżetu interfejsu użytkownika (na przykład przycisku) w istniejącej scenie i utworzenie nowego segue'a do właśnie utworzonej dokumentacji scenorysu. Z menu podręcznego wybierz pozycję Pokaż , aby ukończyć segue:
Zapisz zmiany w scenorysie.
Wróć do Visual Studio dla komputerów Mac, aby zsynchronizować zmiany.
Po uruchomieniu aplikacji i kliknięciu przez użytkownika elementu interfejsu użytkownika, z którego utworzono segue, zostanie wyświetlony scena o danym identyfikatorze sceny z zewnętrznego scenorysu określonego w dokumentacji scenorysu.
Odwoływanie się do określonej sceny w tym samym scenie
Aby dodać odwołanie do określonej sceny, wykonaj następujące czynności:
W Eksplorator rozwiązań kliknij dwukrotnie scenorys, aby otworzyć go do edycji.
Dodaj nową scenę i zaprojektuj jej układ w zwykły sposób:
W inspektorze tożsamości wprowadź identyfikator scenorysu dla nowego kontrolera okna sceny:
Przeciągnij odwołanie do scenorysu z przybornika na powierzchnię projektową:
W inspektorze atrybutów wybierz pozycję Identyfikator odwołania (identyfikator sceny) utworzonej powyżej sceny:
Kliknięcie kontrolki widżetu interfejsu użytkownika (na przykład przycisku) w istniejącej scenie i utworzenie nowego segue'a do właśnie utworzonej dokumentacji scenorysu. Z menu podręcznego wybierz pozycję Pokaż , aby ukończyć segue:
Zapisz zmiany w scenorysie.
Wróć do Visual Studio dla komputerów Mac, aby zsynchronizować zmiany.
Gdy aplikacja zostanie uruchomiona, a użytkownik kliknie element interfejsu użytkownika utworzony na serwerze Segue, zostanie wyświetlony scena o podanym identyfikatorze sceny w tym samym scenie określonym w dokumentacji scenorysu.