Работа с действиями строк в Xamarin.iOS
В этом руководстве показано, как создать настраиваемые действия прокрутки для строк таблицы с помощью UISwipeActionsConfiguration или UITableViewRowAction
iOS предоставляет два способа выполнения действий в таблице: UISwipeActionsConfiguration
и UITableViewRowAction
.
UISwipeActionsConfiguration
представлен в iOS 11 и используется для определения набора действий, которые должны выполняться, когда пользователь проводит пальцем в любом направлении по строке в представлении таблицы. Это поведение аналогично собственному Mail.app
Класс UITableViewRowAction
используется для определения действия, которое будет происходить, когда пользователь проводит пальцем влево по горизонтали в строке в представлении таблицы.
Например, при редактировании таблицы прокрутка влево в строке отображает кнопку "Удалить " по умолчанию. При присоединении нескольких экземпляров класса к классу UITableView
можно определить несколько пользовательских UITableViewRowAction
действий, каждый из которых имеет собственный текст, форматирование и поведение.
UISwipeActionsConfiguration
Существует три шага, необходимых для реализации действий прокрутки с помощью UISwipeActionsConfiguration
следующих действий:
- Переопределение
GetLeadingSwipeActionsConfiguration
и/илиGetTrailingSwipeActionsConfiguration
методы. Эти методы возвращаютUISwipeActionsConfiguration
значение . - Создайте экземпляр возвращаемого
UISwipeActionsConfiguration
экземпляра. Этот класс принимает массивUIContextualAction
. - Создайте
UIContextualAction
.
Они подробно описаны в следующих разделах.
1. Реализация методов SwipeActionsConfigurations
UITableViewController
(а также UITableViewSource
UITableViewDelegate
и) содержат два метода: GetLeadingSwipeActionsConfiguration
и GetTrailingSwipeActionsConfiguration
, которые используются для реализации набора действий пальцем в строке представления таблицы. Действие прокрутки в начале относится к пальцем с левой стороны экрана в левой и правой части экрана, а также с правой стороны экрана в левой части языка.
В следующем примере демонстрируется реализация конфигурации начального пальцем. Два действия создаются из контекстных действий, описанных ниже. Затем эти действия передаются в только что инициализированную UISwipeActionsConfiguration
, которая используется в качестве возвращаемого значения.
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. Создание экземпляра UISwipeActionsConfiguration
Создайте UISwipeActionsConfiguration
экземпляр с FromActions
помощью метода для добавления нового массива UIContextualAction
s, как показано в следующем фрагменте кода:
var leadingSwipe = UISwipeActionsConfiguration.FromActions(new UIContextualAction[] { flagAction, definitionAction })
leadingSwipe.PerformsFirstActionWithFullSwipe = false;
Важно отметить, что порядок отображения действий зависит от того, как они передаются в массив. Например, приведенный выше код для ведущих пальцем отображает действия следующим образом:
Для конечных прокрутки действия будут отображаться, как показано на следующем рисунке:
Этот фрагмент кода также использует новое PerformsFirstActionWithFullSwipe
свойство. По умолчанию это свойство имеет значение true, что означает, что первое действие в массиве произойдет, когда пользователь проводит пальцем полностью по строке. Если у вас есть действие, которое не является разрушительным (например, "Удалить", это может не быть идеальным поведением, поэтому его следует задать.false
Создание класса UIContextualAction
Контекстное действие — это место, в котором вы фактически создаете действие, которое будет отображаться, когда пользователь проводит по строке таблицы.
Чтобы инициализировать действие, необходимо указать UIContextualActionStyle
название и а UIContextualActionHandler
. Принимает UIContextualActionHandler
три параметра: действие, представление, в котором отображалось действие, и обработчик завершения:
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;
}
Можно изменить различные визуальные свойства, такие как цвет фона или изображение действия. Приведенный выше фрагмент кода демонстрирует добавление изображения в действие и задание его цвета фона синим цветом.
После создания контекстных действий они могут использовать для инициализации UISwipeActionsConfiguration
в методе GetLeadingSwipeActionsConfiguration
.
UITableViewRowAction
Чтобы определить одно или несколько пользовательских UITableViewDelegate
действий строки для объектаUITableView
, необходимо создать экземпляр класса и переопределить EditActionsForRow
метод. Например:
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
}
}
Статический UITableViewRowAction.Create
метод используется для создания нового UITableViewRowAction
, отображающего кнопку Привет , когда пользователь проводит пальцем влево по горизонтали в строку в таблице. Позже создается и присоединяется к нему UITableView
новый экземплярTableDelegate
. Например:
TableDelegate tableDelegate;
...
// Replace the standard delete button with a "Hi" button
tableDelegate = new TableDelegate ();
table.Delegate = tableDelegate;
При выполнении приведенного выше кода пользователь проводит пальцем влево в строку таблицы, кнопка "Привет" будет отображаться вместо кнопки "Удалить", отображаемой по умолчанию:
Если пользователь нажимает кнопку "Привет", Hello World!
он будет записан в консоль в Visual Studio для Mac или Visual Studio при запуске приложения в режиме отладки.