在DropPoposal为MoveXamarin时不调用UITableViewDropDelegate PerformDrop

问题描述

我正在为Xamarins UITableView编写自定义渲染,该渲染允许拖放。 我实现了UITableViewDragDelegate和DropDelegate。

当我在DropSessionDidUpdate函数中使用UIDropOperation.copy时,一切正常,因为随后调用PerformDrop。问题是“复制”在拖动时将这个讨厌的+图标添加到单元格中,这是我不想拥有的。 如果我返回UIDropOperation.Move,则+图标消失了。但是然后不再调用PerformDrop。

我发现了一些可能出问题的提示,例如清洁一下: UIDropInteractionDelegate performDrop not called? 在同一篇文章中,一个答案解释说,仅在session.allowsMo​​ve为true时才能使用Move。 因此,我在数据源中实现了CanMoveRow:

public override bool CanMoveRow(UITableView tableView,NSIndexPath indexPath)
{
      return true;
}

但这并不能解决问题。至少我可以确认session.allowsMo​​ve现在总是正确的。 在MacOS的另一个线程(我丢失了链接)中,据说如果UIDragItem的NSItemProvider没有关联的对象,执行删除将不起作用。因此,我为Forms对象实现了一个包装器,并将其分配给NSItemProvider:

        public override UIDragItem[] GetItemsForBeginningDragSession(UITableView tableView,iuiDragSession session,NSIndexPath indexPath)
        {
            if (list.ItemsSource is IList source) //List is the instance of the Xamarin Forms ListView
            { //Check is always fulfilled
                var item = NSObjectWrapper.Wrap(source[indexPath.Row]);
                var itemProvider = new NSItemProvider(item,item.GetType().ToString());
                var dragItem = new UIDragItem(itemProvider);
                dragItem.LocalObject = item;
                return new UIDragItem[] { dragItem };
            }
            return null;
        }

但是,仍然没有变化。

我在做什么错,我该如何采取行动进行放下操作,或者如何摆脱复制视图中的+图标?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)