Aracılığıyla paylaş


Xamarin.iOS'ta Satır Eylemleriyle Çalışma

Bu kılavuzda UISwipeActionsConfiguration veya UITableViewRowAction ile tablo satırları için özel çekme eylemlerinin nasıl oluşturulacağı gösterilmektedir

Satırlarda çekme eylemlerini gösterme

iOS, bir tabloda eylem gerçekleştirmek için iki yol sağlar: UISwipeActionsConfiguration ve UITableViewRowAction.

UISwipeActionsConfigurationiOS 11'de kullanıma sunulmuştur ve kullanıcı tablo görünümündeki bir satırda herhangi bir yönde çekildiğinde gerçekleşmesi gereken bir dizi eylemi tanımlamak için kullanılır. Bu davranış, yerel Mail.app benzerdir

UITableViewRowAction sınıfı, kullanıcı tablo görünümündeki bir satırda yatay olarak sola doğru çekince gerçekleştirilecek bir eylemi tanımlamak için kullanılır. Örneğin, bir tabloyu düzenlerken, satırda sola doğru çekme işlemi varsayılan olarak Bir Sil düğmesi görüntüler. bir öğesine sınıfının UITableViewbirden çok örneği UITableViewRowAction eklenerek, her biri kendi metni, biçimlendirmesi ve davranışı olan birden çok özel eylem tanımlanabilir.

UISwipeActionsConfiguration

ile UISwipeActionsConfigurationçekme eylemleri uygulamak için üç adım gerekir:

  1. ve/veya GetTrailingSwipeActionsConfiguration yöntemlerini geçersiz kılınGetLeadingSwipeActionsConfiguration. Bu yöntemler bir UISwipeActionsConfigurationdöndürür.
  2. Döndürülecek öğesinin UISwipeActionsConfiguration örneğini alın. Bu sınıf bir dizi UIContextualActionalır.
  3. oluşturun UIContextualAction.

Bunlar aşağıdaki bölümlerde daha ayrıntılı olarak açıklanmıştır.

1. SwipeActionsConfigurations yöntemlerini uygulama

UITableViewController (ve ayrıca UITableViewSource ve UITableViewDelegate) iki yöntem içerir: GetLeadingSwipeActionsConfiguration ve GetTrailingSwipeActionsConfiguration, tablo görünümü satırına çekme eylemleri uygulamak için kullanılır. Öndeki çekme eylemi, soldan sağa bir dilde ekranın sol tarafından ve sağdan sola dilde ekranın sağ tarafından yapılan çekme işlemini ifade eder.

Aşağıdaki örnekte baştaki çekme yapılandırmasının uygulanması gösterilmektedir. Bağlamsal eylemlerden aşağıda açıklanan iki eylem oluşturulur. Bu eylemler daha sonra, dönüş değeri olarak kullanılan yeni başlatılan UISwipeActionsConfigurationöğesine geçirilir.

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. Örnek oluşturma UISwipeActionsConfiguration

UISwipeActionsConfiguration Aşağıdaki kod parçacığında FromActions gösterildiği gibi yeni bir s dizisi UIContextualActioneklemek için yöntemini kullanarak bir örneği oluşturun:

var leadingSwipe = UISwipeActionsConfiguration.FromActions(new UIContextualAction[] { flagAction, definitionAction })

leadingSwipe.PerformsFirstActionWithFullSwipe = false;

Eylemlerinizin görüntülenme sırasının dizinize nasıl geçirildiklerine bağlı olduğunu unutmayın. Örneğin, öndeki çekme işlemleri için yukarıdaki kod eylemleri şu şekilde görüntüler:

tablo satırında görüntülenen öndeki çekme eylemleri

Sondaki çekme işlemleri için eylemler aşağıdaki görüntüde gösterildiği gibi görüntülenir:

tablo satırında görüntülenen sondaki çekme eylemleri

Bu kod parçacığı yeni özelliği de kullanır PerformsFirstActionWithFullSwipe . Varsayılan olarak, bu özellik true olarak ayarlanır; başka bir deyişle, dizideki ilk eylem, bir kullanıcı bir satıra tam olarak çekildiğinde gerçekleşir. Yıkıcı olmayan bir eyleminiz varsa (örneğin, "Sil", bu ideal bir davranış olmayabilir ve bu nedenle bunu olarak falseayarlamanız gerekir.

UIContextualAction oluşturma

Bağlamsal eylem, kullanıcı bir tablo satırını çekince görüntülenecek eylemi oluşturduğunuz yerdir.

Bir eylemi başlatmak için bir UIContextualActionStyle, başlığı ve bir UIContextualActionHandlersağlamanız gerekir. UIContextualActionHandler üç parametre alır: bir eylem, eylemin görüntülendiği görünüm ve tamamlama işleyicisi:

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

Eylemin arka plan rengi veya görüntüsü gibi çeşitli görsel özellikler düzenlenebilir. Yukarıdaki kod parçacığı, eyleme görüntü eklemeyi ve arka plan rengini mavi olarak ayarlamayı gösterir.

Bağlamsal eylemler oluşturulduktan sonra yöntemini başlatmak UISwipeActionsConfigurationGetLeadingSwipeActionsConfiguration için kullanabilirler.

UITableViewRowAction

için bir UITableViewveya daha fazla özel satır eylemi tanımlamak için sınıfının bir örneğini UITableViewDelegate oluşturmanız ve yöntemini geçersiz kılmanız EditActionsForRow gerekir. Örneğin:

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

Statik UITableViewRowAction.Create yöntem, kullanıcı tablodaki bir satırda yatay olarak sola doğru çekince Merhaba düğmesini görüntüleyen yeni UITableViewRowAction bir yöntem oluşturmak için kullanılır. Daha sonra yeni bir örneği TableDelegate oluşturulur ve öğesine UITableVieweklenir. Örneğin:

TableDelegate tableDelegate;
...

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

Yukarıdaki kod çalıştırıldığında ve kullanıcı bir tablo satırında sola doğru çekince, varsayılan olarak görüntülenen Sil düğmesi yerine Merhaba düğmesi görüntülenir:

Sil düğmesi yerine Görüntülenen Merhaba düğmesi

Kullanıcı Merhaba düğmesine dokunursa, Hello World! uygulama hata ayıklama modunda çalıştırıldığında Mac için Visual Studio veya Visual Studio'da konsola yazılır.