2016-09-08 3 views
0

AccessoryButtonTapped 테이블보기 대리인에서 재정의하는 방법이 있지만 ListViewRenderer 하위 클래스에서이를 수행하는 방법이 명확하지 않습니까?Xamarin.Forms에서 iOS의 액세서리 버튼을 처리하는 방법은 무엇입니까?

공개 표시기를 표시 할 수 있지만 탭을 처리 할 수 ​​없습니다.

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; 
    } 
} 

답변

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 
    } 
} 
+0

감사합니다, 스벤 - 마이클, 나는 그것을 시도 할 것입니다. WeakDelegate를 설정하는 것이 안전합니까? :) 이미 기본 구현으로 설정되어 있다고 가정합니다. – rudyryk

1

, 당신의 상속을 작성하여 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(); 
    } 
} 

당신은 물론 그래서 추가 할 수있는 대리자를 호출 저의 매개 변수는 공유 코드에 더 많은 데이터를 제공합니다. 이렇게하면 플랫폼에 특정한 코드가 생기지 만 코드를 재사용 할 수있게 '가능한 한 빨리'공유 코드로 돌아갑니다.

지도 컨트롤이있는 다른 예제는 here입니다.

관련 문제