Freigeben über


Arbeiten mit Zeilenaktionen in Xamarin.iOS

In diesem Handbuch wird veranschaulicht, wie Sie benutzerdefinierte Streifaktionen für Tabellenzeilen mit UISwipeActionsConfiguration oder UITableViewRowAction erstellen.

Anzeigen von Wischaktionen in Zeilen

iOS bietet zwei Möglichkeiten zum Ausführen von Aktionen in einer Tabelle: UISwipeActionsConfiguration und UITableViewRowAction.

UISwipeActionsConfigurationwurde in iOS 11 eingeführt und wird verwendet, um eine Reihe von Aktionen zu definieren, die ausgeführt werden sollen, wenn der Benutzer in einer Zeile in einer Tabellenansicht in beide Richtungen streift. Dieses Verhalten ähnelt dem der systemeigenen Mail.app

Die UITableViewRowAction Klasse wird verwendet, um eine Aktion zu definieren, die ausgeführt wird, wenn der Benutzer horizontal in einer Zeile in einer Tabellenansicht nach links wischt. Wenn Sie beispielsweise eine Tabelle bearbeiten, wird beim Wischen nach links in einer Zeile standardmäßig eine Schaltfläche "Löschen " angezeigt. Durch Das Anfügen mehrerer Instanzen der UITableViewRowAction Klasse an eine UITableView, mehrere benutzerdefinierte Aktionen können definiert werden, jeweils mit eigenem Text, Formatierung und Verhalten.

UISwipeActionsConfiguration

Zum Implementieren von Wischaktionen sind drei Schritte erforderlich:UISwipeActionsConfiguration

  1. Überschreiben GetLeadingSwipeActionsConfiguration und/oder GetTrailingSwipeActionsConfiguration Methoden. Diese Methoden geben ein UISwipeActionsConfiguration.
  2. Instanziieren Sie den UISwipeActionsConfiguration zurückzugebenden Wert. Diese Klasse akzeptiert ein Array von UIContextualAction.
  3. Erstellen Sie eine UIContextualAction.

Diese werden in den folgenden Abschnitten ausführlicher erläutert.

1. Implementieren der SwipeActionsConfigurations-Methoden

UITableViewController (und UITableViewSourceUITableViewDelegate) enthalten zwei Methoden: GetLeadingSwipeActionsConfiguration und GetTrailingSwipeActionsConfiguration, die zum Implementieren einer Reihe von Wischaktionen in einer Tabellenansichtszeile verwendet werden. Die führende Wischaktion bezieht sich auf eine Wischbewegung von der linken Seite des Bildschirms in einer Von links nach rechts und von der rechten Seite des Bildschirms in einer Rechts-nach-links-Sprache.

Im folgenden Beispiel wird die Implementierung der führenden Wischkonfiguration veranschaulicht. Zwei Aktionen werden aus den kontextbezogenen Aktionen erstellt, die unten erläutert werden. Diese Aktionen werden dann an eine neu initialisierte UISwipeActionsConfigurationÜbergeben, die als Rückgabewert verwendet wird.

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. Instanziieren eines UISwipeActionsConfiguration

Instanziieren Sie ein UISwipeActionsConfiguration Array mit der FromActions Methode, um ein neues Array von UIContextualActions hinzuzufügen, wie im folgenden Codeausschnitt gezeigt:

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

leadingSwipe.PerformsFirstActionWithFullSwipe = false;

Es ist wichtig zu beachten, dass die Reihenfolge, in der Ihre Aktionen angezeigt werden, davon abhängig ist, wie sie in Ihr Array übergeben werden. Beispielsweise zeigt der obige Code für führende Wischbewegungen die Aktionen wie folgt an:

Führende Wischaktionen, die in einer Tabellenzeile angezeigt werden

Bei nachgestellten Wischen werden die Aktionen wie in der folgenden Abbildung dargestellt angezeigt:

Nachgestellte Wischaktionen, die in einer Tabellenzeile angezeigt werden

Dieser Codeausschnitt verwendet auch die neue PerformsFirstActionWithFullSwipe Eigenschaft. Diese Eigenschaft ist standardmäßig auf "true" festgelegt, d. h., die erste Aktion im Array erfolgt, wenn ein Benutzer vollständig in eine Zeile wischen. Wenn Sie eine Aktion haben, die nicht destruktiv ist (z. B. "Löschen", ist dies möglicherweise nicht das ideale Verhalten, und Sie sollten sie daher auf false".

Erstellen der Datei UIContextualAction

Die Kontextaktion ist der Ort, an dem Sie tatsächlich die Aktion erstellen, die angezeigt wird, wenn der Benutzer eine Tabellenzeile streift.

Zum Initialisieren einer Aktion müssen Sie einen UIContextualActionStyle, einen Titel und einen UIContextualActionHandler. Dies UIContextualActionHandler führt drei Parameter aus: eine Aktion, die Ansicht, in der die Aktion angezeigt wurde, und einen Abschlusshandler:

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;
}

Verschiedene visuelle Eigenschaften, z. B. die Hintergrundfarbe oder das Bild der Aktion, können bearbeitet werden. Der obige Codeausschnitt veranschaulicht das Hinzufügen eines Bilds zur Aktion und festlegen dessen Hintergrundfarbe auf Blau.

Nachdem die kontextbezogenen Aktionen erstellt wurden, können sie die in der GetLeadingSwipeActionsConfiguration Methode initialisierenUISwipeActionsConfiguration.

UITableViewRowAction

Um eine oder mehrere benutzerdefinierte Zeilenaktionen für ein UITableViewObjekt zu definieren, müssen Sie eine Instanz der UITableViewDelegate Klasse erstellen und die EditActionsForRow Methode außer Kraft setzen. Zum Beispiel:

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
    }
}

Die statische UITableViewRowAction.Create Methode wird verwendet, um eine neue UITableViewRowAction Zu erstellen, die eine Hi-Schaltfläche anzeigt, wenn der Benutzer horizontal in einer Zeile in der Tabelle nach links wischt. Später wird eine neue Instanz der TableDelegate wird erstellt und an die UITableViewangefügt. Zum Beispiel:

TableDelegate tableDelegate;
...

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

Wenn der obige Code ausgeführt wird und der Benutzer in einer Tabellenzeile nach links wischen, wird die Schaltfläche "Hallo " anstelle der Schaltfläche "Löschen " angezeigt, die standardmäßig angezeigt wird:

Die Schaltfläche

Wenn der Benutzer auf die Schaltfläche "Hi" tippt, wird er in Visual Studio für Mac oder Visual Studio in die Konsole geschrieben, Hello World! wenn die Anwendung im Debugmodus ausgeführt wird.