0

AccessoryButtonTappedテーブル ビュー デリゲートでオーバーライドするメソッドがありますが、ListViewRendererサブクラスでそれを実行する方法が明確ではありませんか?

そのため、開示インジケーターを表示できますが、タップを処理できません。

public class ContactCellRenderer : ImageCellRenderer
{
    public override UITableViewCell GetCell (
        Cell item, UITableViewCell reusableCell, UITableView tv)
    {
        var cell = base.GetCell (item, reusableCell, tv);
        cell.Accessory = UITableViewCellAccessory.DetailDisclosureButton;
        return cell;
    }
}
4

2 に答える 2

1

Sven-Michael に加えて、ListView(まだ持っていない場合)の継承を作成して、次のDelegateように a を追加することで、彼のコードを充実させることができます。

public class AccessoryListView : ListView
{
   public delegate void OnAccessoryTappedDelegate();

   public OnAccessoryTappedDelegate OnAccessoryTapped { get; set; }
}

カスタムレンダラーから - 新しい継承に設定することを忘れないでくださいListView- デリゲートを呼び出します

public class ContactListViewRenderer : ListViewRenderer, IUITableViewDelegate
{
    private AccessoryListView _formsControl;

    protected override void OnElementChanged(ElementChangedEventArgs<AccessoryListView> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            Control.WeakDelegate = this; // or. Control.Delegate
        }

        if (e.NewElement != null)
           _formsControl = e.NewElement;
    }

    public virtual void AccessoryButtonTapped(UITableView tableView, NSIndexPath indexPath)
    {
        // accessory tapped
        if (_formsControl.OnAccessoryTapped != null)
           _formsControl.OnAccessoryTapped();
    }
}

もちろん、そこにいくつかのパラメーターを追加して、共有コードにさらに多くのデータを提供することもできます。これにより、プラットフォーム固有のコードがいくつかありますが、「できるだけ早く」共有コードに戻り、コードをより再利用可能にします。

Map コントロールを使用した別のサンプルは、ここにあります。

于 2016-09-09T06:32:09.800 に答える
1

AccessoryButtonTappedレンダラーにメソッドを実装するだけでよいと思います。

public class ContactListViewRenderer : ListViewRenderer, IUITableViewDelegate
{
    protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            Control.WeakDelegate = this; // or. Control.Delegate
        }
    }

    public virtual void AccessoryButtonTapped(UITableView tableView, NSIndexPath indexPath)
    {
        // accessory tapped
    }
}
于 2016-09-08T20:36:38.523 に答える