Sdílet prostřednictvím


Opakované použití stránek Xamarin.Forms v rozšíření pro iOS

Rozšíření pro iOS umožňují přizpůsobit stávající chování systému přidáním dalších funkcí předdefinovaných body rozšíření pro iOS a macOS, jako jsou vlastní kontextové akce, automatické vyplňování hesla, filtry příchozích volání, modifikátory obsahu oznámení a další. Xamarin.iOS podporuje rozšíření a tento průvodce vás provede vytvořením rozšíření pro iOS pomocí nástrojů Xamarin.

Rozšíření se distribuují jako součást aplikace kontejneru a aktivují se z konkrétního bodu rozšíření v hostitelské aplikaci. Kontejnerová aplikace je obvykle jednoduchá aplikace pro iOS, která poskytuje uživateli informace o rozšíření, o tom, jak ho aktivovat a používat. Existují tři hlavní přístupy ke sdílení kódu mezi rozšířením a kontejnerovou aplikací:

  1. Běžný projekt pro iOS

    Veškerý sdílený kód můžete vložit mezi kontejner a rozšíření do sdílené knihovny pro iOS a odkazovat na knihovnu z obou projektů. Sdílená knihovna obvykle obsahuje nativní UIViewControllers a musí to být knihovna Xamarin.iOS.

  2. Odkazy na soubory.

    V některých případech aplikace Kontejner poskytuje většinu funkcí, zatímco rozšíření potřebuje vykreslit jeden UIViewController. S několika soubory, které chcete sdílet, je běžné přidat odkaz na soubor aplikace Extension ze souboru umístěného v aplikaci Kontejner.

  3. Společný projekt Xamarin.Forms

    Pokud už jsou stránky aplikací sdíleny s jinou platformou, například s Androidem, pomocí rozhraní Xamarin.Forms, je běžný přístup k opětovnému sestavení požadovaných stránek nativně v projektu rozšíření, protože rozšíření pro iOS funguje s nativními uiViewControllers a nikoli stránkami Xamarin.Forms. Musíte provést další kroky pro použití Xamarin.Forms v rozšíření pro iOS, které jsou vysvětleny níže.

Xamarin.Forms v projektu rozšíření pro iOS

Možnost používat Xamarin.Forms v nativním projektu je poskytována prostřednictvím nativních formulářů. ContentPageUmožňuje přímé přidání odvozených stránek do nativních projektů Xamarin.iOS. Metoda CreateViewController rozšíření převede instanci stránky Xamarin.Forms na nativní UIViewController, který lze použít nebo upravit jako běžný kontroler. Vzhledem k tomu, že rozšíření pro iOS je speciální druh nativního projektu pro iOS, můžete zde také použít nativní formuláře .

Důležité

Rozšíření pro iOS mají mnoho známých omezení . I když v rozšíření pro iOS můžete použít Xamarin.Forms, měli byste to udělat velmi pečlivě, monitorovat využití paměti a čas spuštění. Jinak by rozšíření mohlo být ukončeno iOSem bez jakéhokoliv způsobu, jak to řádně zpracovat.

Názorný postup

V tomto názorném postupu vytvoříte aplikaci Xamarin.Forms, rozšíření Xamarin.iOS a znovu použijete sdílený kód v projektu rozšíření:

  1. Otevřete Visual Studio pro Mac, vytvořte nový projekt Xamarin.Forms pomocí šablony Prázdná aplikace Forms a pojmenujte ho FormsShareExtension:

    Vytvořit projekt

  2. V souboru FormsShareExtension/MainPage.xaml nahraďte obsah následujícím rozložením:

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage
        x:Class="FormsShareExtension.MainPage"
        xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        xmlns:d="http://xamarin.com/schemas/2014/forms/design"
        xmlns:local="clr-namespace:FormsShareExtension"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        x:DataType="local:MainPageViewModel"
        BackgroundColor="Orange"
        mc:Ignorable="d">
        <ContentPage.BindingContext>
            <local:MainPageViewModel Message="Hello from Xamarin.Forms!" />
        </ContentPage.BindingContext>
        <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
            <Label
                Margin="20"
                Text="{Binding Message}"
                VerticalOptions="CenterAndExpand" />
            <Button Command="{Binding DoCommand}" Text="Do the job!" />
        </StackLayout>
    </ContentPage>
    
  3. Přidejte novou třídu s názvem MainPageViewMode do projektu FormsShareExtension a nahraďte obsah třídy následujícím kódem:

    using System;
    using System.ComponentModel;
    using System.Windows.Input;
    using Xamarin.Forms;
    
    namespace FormsShareExtension
    {
        public class MainPageViewModel : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
    
            private string _message;
            public string Message
            {
                get { return _message; }
                set
                {
                    if (_message != value)
                    {
                        _message = value;
                        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Message)));
                    }
                }
            }
    
            private ICommand _doCommand;
            public ICommand DoCommand
            {
                get { return _doCommand; }
                set
                {
                    if(_doCommand != value)
                    {
                        _doCommand = value;
                        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DoCommand)));
                    }
                }
            }
    
            public MainPageViewModel()
            {
                DoCommand = new Command(OnDoCommandExecuted);
            }
    
            private void OnDoCommandExecuted(object state)
            {
                Message = $"Job {Environment.TickCount} has been completed!";
            }
        }
    }
    

    Kód se sdílí na všech platformách a bude ho také používat rozšíření pro iOS.

  4. V oblasti řešení klikněte pravým tlačítkem na řešení, vyberte Přidat rozšíření akce rozšíření > projektu > pro iOS>, pojmenujte ho MyAction a stiskněte Vytvořit:>

    Snímek obrazovky s vybranou možností Zvolit šablonu s rozšířením akce

  5. Pokud chcete použít Xamarin.Forms v rozšíření pro iOS a sdílený kód, musíte přidat požadované odkazy:

    • Klikněte pravým tlačítkem myši na rozšíření pro iOS, vyberte Reference > Add Reference > Projects > FormsShareExtension a stiskněte OK.

    • Klikněte pravým tlačítkem na rozšíření pro iOS, vyberte Balíčky Spravovat balíčky > NuGet... > Xamarin.Forms a stiskněte Přidat balíček.

  6. Rozbalte projekt rozšíření a upravte vstupní bod tak, aby inicializoval Xamarin.Forms a vytvořil stránky. Podle požadavků na iOS musí rozšíření definovat vstupní bod v souboru Info.plist jako NSExtensionMainStoryboard nebo NSExtensionPrincipalClass. Po aktivaci vstupního bodu můžete v tomto případě ActionViewController.ViewDidLoad vytvořit instanci stránky Xamarin.Forms a zobrazit ji uživateli. Proto otevřete vstupní bod a nahraďte metodu ViewDidLoad následující implementací:

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
    
        // Initialize Xamarin.Forms framework
        global::Xamarin.Forms.Forms.Init();
        // Create an instance of XF page with associated View Model
        var xfPage = new MainPage();
        var viewModel = (MainPageViewModel)xfPage.BindingContext;
        viewModel.Message = "Welcome to XF Page created from an iOS Extension";
        // Override the behavior to complete the execution of the Extension when a user press the button
        viewModel.DoCommand = new Command(() => DoneClicked(this));
        // Convert XF page to a native UIViewController which can be consumed by the iOS Extension
        var newController = xfPage.CreateViewController();
        // Present new view controller as a regular view controller
        this.PresentModalViewController(newController, false);
    }
    

    Vytvoří MainPage instanci pomocí standardního konstruktoru a před použitím v rozšíření ji převeďte na nativní UIViewController metodu CreateViewController rozšíření.

    Sestavte a spusťte aplikaci:

    Snímek obrazovky ukazuje zprávu Hello z Xamarinu dot Forms na mobilním zařízení.

    Rozšíření aktivujete tak, že přejdete do prohlížeče Safari, zadáte libovolnou webovou adresu, například microsoft.com, stisknete klávesu Navigate a v dolní části stránky stisknete ikonu Sdílet , abyste viděli dostupná rozšíření akcí. V seznamu dostupných rozšíření vyberte rozšíření MyAction klepnutím na něj:

    Snímek obrazovky ukazuje stránku Další informace o Microsoft Teams se zvýrazněnou ikonou Sdílet na mobilním zařízení. Snímek obrazovky znázorňující oficiální domovskou stránku se zvýrazněnou akcí MyAction na mobilním zařízení Snímek obrazovky ukazuje úvodní stránku X F vytvořenou ze zprávy rozšíření i O S na mobilním zařízení.

    Rozšíření se aktivuje a uživateli se zobrazí stránka Xamarin.Forms. Všechny vazby a příkazy fungují jako v aplikaci Kontejner.

  7. Původní kontroler zobrazení vstupního bodu je viditelný, protože je vytvořen a aktivován systémem iOS. Pokud chcete tento problém vyřešit, změňte modální styl prezentace na UIModalPresentationStyle.FullScreen nový kontroler přidáním následujícího kódu přímo před PresentModalViewController volání:

    newController.ModalPresentationStyle = UIModalPresentationStyle.FullScreen;
    

    Sestavte a spusťte v simulátoru iOS nebo zařízení:

    Xamarin.Forms v rozšíření pro iOS

    Důležité

    Pro sestavení zařízení se ujistěte, že používáte správná nastavení sestavení a konfiguraci vydané verze , jak je popsáno zde.