微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在DropPoposal为MoveXamarin时不调用UITableViewDropDelegate PerformDrop

如何解决在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 举报,一经查实,本站将立刻删除。