Udostępnij za pośrednictwem


Praca z akcjami wierszy w środowisku Xamarin.iOS

W tym przewodniku pokazano, jak utworzyć niestandardowe akcje szybkiego przesunięcia dla wierszy tabeli za pomocą interfejsu użytkownikaISwipeActionsConfiguration lub UITableViewRowAction

Demonstrowanie akcji szybkiego przesunięcia w wierszach

System iOS udostępnia dwa sposoby wykonywania akcji w tabeli: UISwipeActionsConfiguration i UITableViewRowAction.

UISwipeActionsConfigurationwprowadzono w systemie iOS 11 i służy do definiowania zestawu akcji, które powinny mieć miejsce, gdy użytkownik ma przesuwać palcem w obu kierunkach w wierszu w widoku tabeli. To zachowanie jest podobne do zachowania natywnego Mail.app

Klasa UITableViewRowAction służy do definiowania akcji, która będzie wykonywana, gdy użytkownik przesuwa palcem w poziomie w poziomie w wierszu w widoku tabeli. Na przykład podczas edytowania tabeli przesuwanie w lewo w wierszu powoduje domyślne wyświetlenie przycisku Usuń . Dołączając wiele wystąpień UITableViewRowAction klasy do UITableViewklasy , można zdefiniować wiele akcji niestandardowych, z których każdy ma własny tekst, formatowanie i zachowanie.

UISwipeActionsConfiguration

Istnieją trzy kroki wymagane do zaimplementowania akcji przesunięcia za pomocą UISwipeActionsConfigurationpolecenia :

  1. Zastąpić GetLeadingSwipeActionsConfiguration metody i/lub GetTrailingSwipeActionsConfiguration . Te metody zwracają wartość UISwipeActionsConfiguration.
  2. UISwipeActionsConfiguration Utwórz wystąpienie elementu, który ma zostać zwrócony. Ta klasa przyjmuje tablicę .UIContextualAction
  3. Utwórz element UIContextualAction.

Zostały one wyjaśnione bardziej szczegółowo w poniższych sekcjach.

1. Implementowanie metod SwipeActionsConfigurations

UITableViewController (oraz ) UITableViewSourceUITableViewDelegatezawierają dwie metody: GetLeadingSwipeActionsConfiguration i GetTrailingSwipeActionsConfiguration, które są używane do implementowania zestawu akcji przesunięcia w wierszu widoku tabeli. Wiodąca akcja przesunięcia odnosi się do przesunięcia od lewej strony ekranu w języku od lewej do prawej i od prawej strony ekranu w języku od prawej do lewej.

W poniższym przykładzie pokazano implementację wiodącej konfiguracji szybkiego przesunięcia. Dwie akcje są tworzone na podstawie akcji kontekstowych, które zostały wyjaśnione poniżej. Te akcje są następnie przekazywane do nowo zainicjowanego UISwipeActionsConfigurationelementu , który jest używany jako wartość zwracana.

public override UISwipeActionsConfiguration GetLeadingSwipeActionsConfiguration(UITableView tableView, NSIndexPath indexPath)
{
    //UIContextualActions
    var definitionAction = ContextualDefinitionAction(indexPath.Row);
    var flagAction = ContextualFlagAction(indexPath.Row);

    //UISwipeActionsConfiguration
    var leadingSwipe = UISwipeActionsConfiguration.FromActions(new UIContextualAction[] { flagAction, definitionAction });

    leadingSwipe.PerformsFirstActionWithFullSwipe = false;

    return leadingSwipe;
}

2. Utworzenie wystąpienia elementu UISwipeActionsConfiguration

UISwipeActionsConfiguration Utwórz wystąpienie obiektu przy użyciu FromActions metody , aby dodać nową tablicę UIContextualActions, jak pokazano w poniższym fragmencie kodu:

var leadingSwipe = UISwipeActionsConfiguration.FromActions(new UIContextualAction[] { flagAction, definitionAction })

leadingSwipe.PerformsFirstActionWithFullSwipe = false;

Należy pamiętać, że kolejność wyświetlania akcji zależy od sposobu ich przekazywania do tablicy. Na przykład powyższy kod dla wiodących przesunięć wyświetla akcje w następujący sposób:

wiodące akcje przesunięcia wyświetlane w wierszu tabeli

W przypadku przesunięcia końcowego akcje zostaną wyświetlone, jak pokazano na poniższej ilustracji:

końcowe akcje przesunięcia wyświetlane w wierszu tabeli

Ten fragment kodu korzysta również z nowej PerformsFirstActionWithFullSwipe właściwości. Domyślnie ta właściwość jest ustawiona na true, co oznacza, że pierwsza akcja w tablicy będzie miała miejsce, gdy użytkownik ma pełne przesunięcie w wierszu. Jeśli masz akcję, która nie jest destrukcyjna (na przykład "Usuń", może to nie być idealne zachowanie i dlatego należy ustawić ją na false.

Utwórz UIContextualAction

Akcja kontekstowa polega na tym, że faktycznie tworzysz akcję, która będzie wyświetlana po przesunięciu wiersza tabeli przez użytkownika.

Aby zainicjować akcję, musisz podać UIContextualActionStyletytuł i .UIContextualActionHandler Polecenie UIContextualActionHandler przyjmuje trzy parametry: akcję, widok, w jaki została wyświetlona akcja, oraz program obsługi uzupełniania:

public UIContextualAction ContextualFlagAction(int row)
{
    var action = UIContextualAction.FromContextualActionStyle
                    (UIContextualActionStyle.Normal,
                        "Flag",
                        (FlagAction, view, success) => {
                            var alertController = UIAlertController.Create($"Report {words[row]}?", "", UIAlertControllerStyle.Alert);
                            alertController.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, null));
                            alertController.AddAction(UIAlertAction.Create("Yes", UIAlertActionStyle.Destructive, null));
                            PresentViewController(alertController, true, null);

                            success(true);
                        });

    action.Image = UIImage.FromFile("feedback.png");
    action.BackgroundColor = UIColor.Blue;

    return action;
}

Można edytować różne właściwości wizualizacji, takie jak kolor tła lub obraz akcji. Powyższy fragment kodu przedstawia dodawanie obrazu do akcji i ustawianie koloru tła na niebieski.

Po utworzeniu akcji kontekstowych można użyć ich do zainicjowania UISwipeActionsConfiguration metody w metodzie GetLeadingSwipeActionsConfiguration .

UITableViewRowAction

Aby zdefiniować co najmniej jedną niestandardową akcję wiersza dla UITableViewklasy , należy utworzyć wystąpienie UITableViewDelegate klasy i zastąpić metodę EditActionsForRow . Na przykład:

using System;
using System.Collections.Generic;
using System.IO;
using Foundation;
using UIKit;

namespace BasicTable
{
    public class TableDelegate : UITableViewDelegate
    {
        #region Constructors
        public TableDelegate ()
        {
        }

        public TableDelegate (IntPtr handle) : base (handle)
        {
        }

        public TableDelegate (NSObjectFlag t) : base (t)
        {
        }

        #endregion

        #region Override Methods
        public override UITableViewRowAction[] EditActionsForRow (UITableView tableView, NSIndexPath indexPath)
        {
            UITableViewRowAction hiButton = UITableViewRowAction.Create (
                UITableViewRowActionStyle.Default,
                "Hi",
                delegate {
                    Console.WriteLine ("Hello World!");
                });
            return new UITableViewRowAction[] { hiButton };
        }
        #endregion
    }
}

Metoda statyczna UITableViewRowAction.Create służy do tworzenia nowego UITableViewRowAction przycisku, który będzie wyświetlał przycisk Hi po przesunięciu w lewo w poziomie w wierszu w tabeli. Później zostanie utworzone nowe wystąpienie obiektu TableDelegate i dołączone do elementu UITableView. Na przykład:

TableDelegate tableDelegate;
...

// Replace the standard delete button with a "Hi" button
tableDelegate = new TableDelegate ();
table.Delegate = tableDelegate;

Gdy powyższy kod zostanie uruchomiony, a użytkownik przesuwa palcem w lewo w wierszu tabeli, przycisk Hi (Hi ) zostanie wyświetlony zamiast przycisku Usuń wyświetlanego domyślnie:

Przycisk Witaj jest wyświetlany zamiast przycisku Usuń

Jeśli użytkownik naciągnie przycisk Witaj, Hello World! zostanie zapisany w konsoli w Visual Studio dla komputerów Mac lub Visual Studio po uruchomieniu aplikacji w trybie debugowania.