![](/img/trans.png)
[英]How to handle the Tap of a ViewCell defined in code in Xamarin.Forms?
[英]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.