繁体   English   中英

为什么从不调用EditActionsForRow?

[英]Why would EditActionsForRow never be called?

我绝对是iOS的初学者。

我想在表上提供向左滑动的动作,但是即使我设置了适当的委托子类,也永远不会在其上调用EditActionsForRow方法。

这是我的代码:

using System;
using UIKit;
using Foundation;
using System.Linq;
using System.Diagnostics;

namespace Tasky {
    public partial class TaskyViewController : UIViewController {
        TasksRepository tasksRepository;
        TaskItemViewSource tasksViewSource;

        public TaskyViewController (IntPtr handle) : base (handle) {
            tasksRepository = new TasksRepository ();

            tasksViewSource = new TaskItemViewSource ();
            tasksViewSource.Data = new TaskItem[0];
            tasksViewSource.DeleteClicked += HandleTaskDeleteClicked;
        }

        public override void ViewDidLoad () {
            base.ViewDidLoad ();

            TasksTable.Delegate = tasksViewSource;
            TasksTable.Source = tasksViewSource;
        }

        public async override void ViewDidAppear (bool animated) {
            base.ViewDidAppear (animated);

            var tasks = await tasksRepository.GetAllTasksAsync ();
            tasksViewSource.Data = tasks.ToArray ();
            TasksTable.ReloadData ();
        }

        async void HandleTaskDeleteClicked (object sender, NSIndexPath e) {
            await tasksRepository.DeleteTaskAsync (tasksViewSource.Data [e.Row]);
            TasksTable.ReloadData ();
        }
    }

    public class TaskItemViewSource : UITableViewSource, IUITableViewDelegate {
        public TaskItem[] Data { get; set; }

        public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) {
            var task = Data [indexPath.Row];
            UITableViewCellStyle cellStyle;
            if (String.IsNullOrEmpty (task.Description)) {
                cellStyle = UITableViewCellStyle.Default;
            } else {
                cellStyle = UITableViewCellStyle.Subtitle;
            }

            var taskCell = new UITableViewCell (cellStyle, "TaskCell");
            taskCell.TextLabel.Text = Data [indexPath.Row].Title;

            if (!String.IsNullOrEmpty (task.Description)) {
                taskCell.DetailTextLabel.Text = Data [indexPath.Row].Description;
            }

            return taskCell;
        }

        public override nint RowsInSection (UITableView tableView, nint section) {
            return Data.Length;
        }

        public override void RowSelected (UITableView tableView, NSIndexPath indexPath) {
            Debug.WriteLine ("Deselected row #" + indexPath.Row);
            tableView.DeselectRow (indexPath, true);
        }

        public event EventHandler<NSIndexPath> DeleteClicked;

        public override UITableViewRowAction[] EditActionsForRow (UITableView tableView, NSIndexPath indexPath) {
            Debug.WriteLine ("Inflating edit actions...");
            var deleteButton = UITableViewRowAction.Create (
                UITableViewRowActionStyle.Destructive,
                "Delete", 
                (action, index) => {
                    if (DeleteClicked != null) {
                        DeleteClicked (this, index);
                    }
                });
            return new [] { deleteButton };
        }
    }
}

编辑:我设法与杰森的言论融合了委托和视图源,取消选择现在工作正常。

Xamarin的TableSource结合了两个本地iOS概念,即DataSource和Delegate。 Xamarin还提供到DataSource和Delegate类的映射。 但是,您不应将TableSource与DataSource和Delegate混合使用。

从Xamarin的TableView文档

如果您在查看Objective-C代码或文档,请注意Xamarin.iOS将UITableViewDelegate协议和UITableViewDataSource类聚合到这一类中。 在Objective-C中没有可比的UITableViewSource类或协议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM