다음을 통해 공유


Xamarin.iOS에서 행 작업 작업

이 가이드에서는 UISwipeActionsConfiguration 또는 UITableViewRowAction을 사용하여 테이블 행에 대한 사용자 지정 살짝 밀기 작업을 만드는 방법을 보여 줍니다.

행에서 살짝 밀기 작업 시연

iOS는 테이블에서 UISwipeActionsConfigurationUITableViewRowAction작업을 수행하는 두 가지 방법을 제공합니다.

UISwipeActionsConfiguration는 iOS 11에서 도입되었으며 사용자가 테이블 보기의 행에서 어느 방향으로든 살짝 밀 때 수행해야 하는 작업 집합을 정의하는 데 사용됩니다. 이 동작은 네이티브 Mail.app

UITableViewRowAction 클래스는 사용자가 테이블 뷰의 행에서 가로로 왼쪽으로 살짝 밀 때 발생하는 작업을 정의하는 데 사용됩니다. 예를 들어 표를 편집할 때 행에서 왼쪽으로 살짝 밀면 기본적으로 삭제 단추가 표시됩니다. 클래스의 UITableViewRowAction 여러 인스턴스를 연결 UITableView하여 각각 고유한 텍스트, 서식 및 동작을 사용하여 여러 사용자 지정 작업을 정의할 수 있습니다.

UISwipeActionsConfiguration

다음을 사용하여 살짝 밀기 작업을 구현하는 데 필요한 세 가지 단계가 UISwipeActionsConfiguration있습니다.

  1. 재정 GetLeadingSwipeActionsConfiguration 의 및/또는 GetTrailingSwipeActionsConfiguration 메서드. 이러한 메서드는 .UISwipeActionsConfiguration
  2. 반환할 값을 인스턴스화 UISwipeActionsConfiguration 합니다. 이 클래스는 .의 UIContextualAction배열을 가져옵니다.
  3. UIContextualAction을 만듭니다.

이 내용은 다음 섹션에서 자세히 설명합니다.

1. SwipeActionsConfigurations 메서드 구현

UITableViewController (및 UITableViewSourceUITableViewDelegate)에는 테이블 뷰 행에서 살짝 밀기 작업 집합을 구현하는 데 사용되는 두 가지 GetLeadingSwipeActionsConfigurationGetTrailingSwipeActionsConfiguration메서드가 포함됩니다. 선행 살짝 밀기 동작은 화면 왼쪽에서 오른쪽 언어로, 오른쪽에서 왼쪽 언어로 화면의 오른쪽에서 살짝 밀기를 나타냅니다.

다음 예제에서는 선행 살짝 밀기 구성을 구현하는 방법을 보여 줍니다. 아래에 설명된 컨텍스트 작업에서 두 개의 작업이 만들어집니다. 그런 다음 이러한 작업은 반환 값으로 사용되는 새로 초기화된 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

다음 코드 조각과 같이 메서드를 사용하여 FromActions 새 s UIContextualAction배열을 추가하여 인스턴스화 UISwipeActionsConfiguration 합니다.

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;
}

작업의 배경색 또는 이미지와 같은 다양한 시각적 속성을 편집할 수 있습니다. 위의 코드 조각은 작업에 이미지를 추가하고 배경색을 파란색으로 설정하는 방법을 보여 줍니다.

컨텍스트 작업이 만들어지면 메서드에서 GetLeadingSwipeActionsConfiguration 초기화하는 UISwipeActionsConfiguration 데 사용할 수 있습니다.

UITableViewRowAction

하나 이상의 사용자 지정 행 동작을 UITableView정의하려면 클래스의 인스턴스를 만들고 메서드를 EditActionsForRow 재정의 UITableViewDelegate 해야 합니다. 예시:

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 메서드는 사용자가 표의 행에서 가로로 왼쪽으로 살짝 밀면 Hi 단추를 표시하는 새 UITableViewRowAction 메서드를 만드는 데 사용됩니다. 나중에 새 인스턴스가 TableDelegate 만들어지고 에 연결됩니다 UITableView. 예시:

TableDelegate tableDelegate;
...

// Replace the standard delete button with a "Hi" button
tableDelegate = new TableDelegate ();
table.Delegate = tableDelegate;

위의 코드가 실행되고 사용자가 테이블 행에서 왼쪽으로 살짝 밀면 기본적으로 표시되는 삭제 단추 대신 Hi 단추가 표시됩니다.

삭제 단추 대신 표시되는 안녕하세요 단추

사용자가 Hi 단추를 Hello World!하면 애플리케이션이 디버그 모드에서 실행될 때 Mac용 Visual Studio 또는 Visual Studio에서 콘솔에 기록됩니다.