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
System iOS udostępnia dwa sposoby wykonywania akcji w tabeli: UISwipeActionsConfiguration
i UITableViewRowAction
.
UISwipeActionsConfiguration
wprowadzono 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 UITableView
klasy , 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ą UISwipeActionsConfiguration
polecenia :
- Zastąpić
GetLeadingSwipeActionsConfiguration
metody i/lubGetTrailingSwipeActionsConfiguration
. Te metody zwracają wartośćUISwipeActionsConfiguration
. UISwipeActionsConfiguration
Utwórz wystąpienie elementu, który ma zostać zwrócony. Ta klasa przyjmuje tablicę .UIContextualAction
- Utwórz element
UIContextualAction
.
Zostały one wyjaśnione bardziej szczegółowo w poniższych sekcjach.
1. Implementowanie metod SwipeActionsConfigurations
UITableViewController
(oraz ) UITableViewSource
UITableViewDelegate
zawierają 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 UISwipeActionsConfiguration
elementu , 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ę UIContextualAction
s, 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:
W przypadku przesunięcia końcowego akcje zostaną wyświetlone, jak pokazano na poniższej ilustracji:
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ć UIContextualActionStyle
tytuł 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 UITableView
klasy , 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:
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.