Trabalhando com ações de linha no Xamarin.iOS
Este guia demonstra como criar ações de passar o dedo personalizadas para linhas de tabela com UISwipeActionsConfiguration ou UITableViewRowAction
O iOS fornece duas maneiras de executar ações em uma tabela: UISwipeActionsConfiguration
e UITableViewRowAction
.
UISwipeActionsConfiguration
foi introduzido no iOS 11 e é usado para definir um conjunto de ações que devem ocorrer quando o usuário passa o dedo em qualquer direção em uma linha em uma exibição de tabela. Esse comportamento é semelhante ao do Mail.app nativo
A UITableViewRowAction
classe é usada para definir uma ação que ocorrerá quando o usuário passar o dedo para a esquerda horizontalmente em uma linha em um modo de exibição de tabela.
Por exemplo, ao editar uma tabela, passar o dedo para a esquerda em uma linha exibe um botão Excluir por padrão. Ao anexar várias instâncias da UITableViewRowAction
classe a um , várias ações personalizadas podem ser definidas, cada uma UITableView
com seu próprio texto, formatação e comportamento.
UISwipeActionsConfiguration
Há três etapas necessárias para implementar ações de passar o dedo com UISwipeActionsConfiguration
:
- Substituição
GetLeadingSwipeActionsConfiguration
e/ouGetTrailingSwipeActionsConfiguration
métodos. Esses métodos retornam umUISwipeActionsConfiguration
arquivo . - Instancie o
UISwipeActionsConfiguration
a ser retornado. Essa classe usa uma matriz deUIContextualAction
. - Crie um
UIContextualAction
.
Estes são explicados em mais detalhes nas seções a seguir.
1. Implementando os métodos SwipeActionsConfigurations
UITableViewController
(e também UITableViewSource
e UITableViewDelegate
) contêm dois métodos: GetLeadingSwipeActionsConfiguration
e GetTrailingSwipeActionsConfiguration
, que são usados para implementar um conjunto de ações de passar o dedo em uma linha de exibição de tabela. A ação de passar o dedo à esquerda refere-se a um gesto de percorrer do lado esquerdo do ecrã num idioma da esquerda para a direita e do lado direito do ecrã num idioma da direita para a esquerda.
O exemplo a seguir demonstra a implementação da configuração de passar o dedo à esquerda. Duas ações são criadas a partir das ações contextuais, que são explicadas abaixo. Essas ações são então passadas para um , recém-inicializado UISwipeActionsConfiguration
, que é usado como o valor de retorno.
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. Instancie um UISwipeActionsConfiguration
Instancie um UISwipeActionsConfiguration
usando o FromActions
método para adicionar uma nova matriz de s, conforme mostrado no seguinte trecho de UIContextualAction
código:
var leadingSwipe = UISwipeActionsConfiguration.FromActions(new UIContextualAction[] { flagAction, definitionAction })
leadingSwipe.PerformsFirstActionWithFullSwipe = false;
É importante observar que a ordem em que suas ações são exibidas depende de como elas são passadas para sua matriz. Por exemplo, o código acima para passar o dedo à esquerda exibe as ações da seguinte forma:
Para gestos de percorrer à direita, as ações serão apresentadas conforme ilustrado na imagem seguinte:
Esse trecho de código também faz uso da nova PerformsFirstActionWithFullSwipe
propriedade. Por padrão, essa propriedade é definida como true, o que significa que a primeira ação na matriz acontecerá quando um usuário passar o dedo totalmente em uma linha. Se você tiver uma ação que não seja destrutiva (por exemplo, "Excluir", esse pode não ser o comportamento ideal e, portanto, você deve defini-la como false
.
Criar um UIContextualAction
A ação contextual é onde você realmente cria a ação que será exibida quando o usuário passar o dedo em uma linha da tabela.
Para inicializar uma ação, você deve fornecer um UIContextualActionStyle
, um título e um UIContextualActionHandler
arquivo . O UIContextualActionHandler
usa três parâmetros: uma ação, o modo de exibição em que a ação foi exibida e um manipulador de conclusão:
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;
}
Várias propriedades visuais, como a cor do plano de fundo ou a imagem da ação, podem ser editadas. O trecho de código acima demonstra como adicionar uma imagem à ação e definir sua cor de plano de fundo como azul.
Depois que as ações contextuais tiverem sido criadas, elas poderão ser usadas para inicializar o UISwipeActionsConfiguration
GetLeadingSwipeActionsConfiguration
no método.
UITableViewRowAction
Para definir uma ou mais ações de linha personalizadas para um UITableView
, você precisará criar uma instância da UITableViewDelegate
classe e substituir o EditActionsForRow
método. Por exemplo:
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
}
}
O método estático UITableViewRowAction.Create
é usado para criar um novo UITableViewRowAction
que exibirá um botão Oi quando o usuário passar o dedo horizontalmente para a esquerda em uma linha na tabela. Posteriormente, uma nova instância do é criada e anexada TableDelegate
UITableView
ao . Por exemplo:
TableDelegate tableDelegate;
...
// Replace the standard delete button with a "Hi" button
tableDelegate = new TableDelegate ();
table.Delegate = tableDelegate;
Quando o código acima é executado e o usuário passa o dedo para a esquerda em uma linha da tabela, o botão Oi será exibido em vez do botão Excluir que é exibido por padrão:
Se o usuário tocar no botão Oi , Hello World!
será gravado no console no Visual Studio para Mac ou Visual Studio quando o aplicativo for executado no modo de depuração.