簡體   English   中英

如何處理Xamarin.Forms中的iOS上的附件按鈕點擊?

[英]How to handle accessory button tap on iOS in Xamarin.Forms?

有一個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;
    }
}

我認為,您只需在渲染器中實現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
    }
}

除了Sven-Michael,您還可以通過創建ListView的繼承關系(如果您還沒有繼承)來豐富他的代碼,並向其添加Delegate ,如下所示:

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控件的示例可以在這里找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM