Compartilhar via


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

Demonstrando ações de passar o dedo em linhas

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 UITableViewcom 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:

  1. Substituição GetLeadingSwipeActionsConfiguration e/ou GetTrailingSwipeActionsConfiguration métodos. Esses métodos retornam um UISwipeActionsConfigurationarquivo .
  2. Instancie o UISwipeActionsConfiguration a ser retornado. Essa classe usa uma matriz de UIContextualAction.
  3. 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 UIContextualActioncó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:

Ações de passar o dedo à esquerda exibidas em uma linha da tabela

Para gestos de percorrer à direita, as ações serão apresentadas conforme ilustrado na imagem seguinte:

deslizamento à direita Ações exibidas em uma linha da tabela

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 UIContextualActionHandlerarquivo . 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 UISwipeActionsConfigurationGetLeadingSwipeActionsConfiguration 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 TableDelegateUITableViewao . 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:

O botão Oi sendo exibido em vez do botão Excluir

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.