Práce s akcemi řádků v Xamarin.iOS
Tato příručka ukazuje, jak vytvořit vlastní akce potáhnutí prstem pro řádky tabulky pomocí UISwipeActionsConfiguration nebo UITableViewRowAction.
iOS nabízí dva způsoby provádění akcí v tabulce: UISwipeActionsConfiguration
a UITableViewRowAction
.
UISwipeActionsConfiguration
byl zaveden v iOSu 11 a slouží k definování sady akcí, které by se měly provést, když uživatel potáhne v libovolném směru na řádku v zobrazení tabulky. Toto chování je podobné jako u nativních Mail.app
Třída UITableViewRowAction
se používá k definování akce, která se provede, když uživatel potáhne vodorovně na řádku v zobrazení tabulky.
Když například upravujete tabulku, potahujte prstem doleva na řádku, ve výchozím nastavení se zobrazí tlačítko Odstranit . Připojením více instancí UITableViewRowAction
třídy k UITableView
, více vlastních akcí lze definovat, každý s vlastním textem, formátováním a chováním.
UISwipeActionsConfiguration
K implementaci akcí potáhnutí prstem se vyžaduje tři kroky:UISwipeActionsConfiguration
- Přepsání
GetLeadingSwipeActionsConfiguration
a/neboGetTrailingSwipeActionsConfiguration
metody Tyto metody vrací hodnotuUISwipeActionsConfiguration
. - Vytvořte instanci, která
UISwipeActionsConfiguration
má být vrácena. Tato třída přebírá poleUIContextualAction
. - Vytvořit .
UIContextualAction
Tyto informace jsou podrobněji vysvětleny v následujících částech.
1. Implementace metod SwipeActionsConfigurations
UITableViewController
(a také UITableViewSource
UITableViewDelegate
) obsahují dvě metody: GetLeadingSwipeActionsConfiguration
a GetTrailingSwipeActionsConfiguration
, které slouží k implementaci sady akcí potáhnutí prstem na řádku zobrazení tabulky. Úvodní akce potáhnutí odkazuje na potáhnutí prstem z levé strany obrazovky v jazyce zleva doprava a z pravé strany obrazovky v jazyce zprava doleva.
Následující příklad (z ukázky TableSwipeActions ) ukazuje implementaci úvodní konfigurace potáhnutí prstem. Z kontextových akcí se vytvoří dvě akce, které jsou vysvětleny níže. Tyto akce se pak předají nově inicializovanému UISwipeActionsConfiguration
, který se použije jako návratová hodnota.
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. Vytvořte instanci UISwipeActionsConfiguration
UISwipeActionsConfiguration
Vytvořte instanci pomocí FromActions
metody pro přidání nového pole UIContextualAction
s, jak je znázorněno v následujícím fragmentu kódu:
var leadingSwipe = UISwipeActionsConfiguration.FromActions(new UIContextualAction[] { flagAction, definitionAction })
leadingSwipe.PerformsFirstActionWithFullSwipe = false;
Je důležité si uvědomit, že pořadí, ve kterém se zobrazují vaše akce, závisí na tom, jak se předávají do pole. Například výše uvedený kód pro úvodní potáhnutí zobrazí akce takto:
Pro koncové potáhnutí prsty se akce zobrazí, jak je znázorněno na následujícím obrázku:
Tento fragment kódu také využívá novou PerformsFirstActionWithFullSwipe
vlastnost. Ve výchozím nastavení je tato vlastnost nastavena na hodnotu true, což znamená, že první akce v poli se stane, když uživatel potáhne prstem úplně na řádku. Pokud máte akci, která není destruktivní (například "Odstranit", nemusí to být ideální chování a proto byste ho měli nastavit na false
.
Vytvořte soubor UIContextualAction
Kontextová akce je místo, kde ve skutečnosti vytvoříte akci, která se zobrazí, když uživatel potáhne řádek tabulky.
Chcete-li inicializovat akci, musíte zadat UIContextualActionStyle
název a UIContextualActionHandler
. Má UIContextualActionHandler
tři parametry: akci, zobrazení, ve kterém se akce zobrazila, a obslužná rutina dokončení:
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;
}
Můžete upravit různé vizuální vlastnosti, například barvu pozadí nebo obrázek akce. Výše uvedený fragment kódu ukazuje přidání obrázku do akce a nastavení jeho barvy pozadí na modrou.
Po vytvoření kontextových akcí je možné je použít k inicializaci UISwipeActionsConfiguration
metody GetLeadingSwipeActionsConfiguration
.
UITableViewRowAction
Chcete-li definovat jednu nebo více vlastních akcí řádku pro určitý UITableView
, budete muset vytvořit instanci UITableViewDelegate
třídy a přepsat metodu EditActionsForRow
. Příklad:
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
}
}
Statická UITableViewRowAction.Create
metoda slouží k vytvoření nové UITableViewRowAction
, která zobrazí tlačítko Hi , když uživatel potáhne prstem doleva vodorovně na řádku v tabulce. Později se vytvoří nová instance TableDelegate
a připojí se k .UITableView
Příklad:
TableDelegate tableDelegate;
...
// Replace the standard delete button with a "Hi" button
tableDelegate = new TableDelegate ();
table.Delegate = tableDelegate;
Když se spustí výše uvedený kód a uživatel potáhne prstem doleva na řádku tabulky, zobrazí se místo tlačítkaOdstranit , které se ve výchozím nastavení zobrazí:
Pokud uživatel klepne na tlačítko Hi, Hello World!
zapíše se do konzoly v Visual Studio pro Mac nebo Visual Studio při spuštění aplikace v režimu ladění.