iOS中的自定义ViewCellRenderer不起作用

时间:2018-04-17 14:21:36

标签: xamarin xamarin.forms xamarin.ios

我试图在Xamarin Forms中使用自定义ViewCellRenderer for iOS,但渲染器从未调用过。我也使用自定义ListViewRenderer,它就像一个魅力。有人对此有任何想法吗?

这是我的TableViewRenderer

[assembly: ExportRenderer(typeof(ListView), typeof(CustomTableViewRenderer))]
namespace OdontoWayPaciente.Mobile.iOS.Renderers
{
    public class CustomTableViewRenderer : ListViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<ListView> e)
        {
            base.OnElementChanged(e);

            if (Control != null && e.NewElement != null)
            {
                Control.TableFooterView = new UIView(CGRect.Empty);


                if (e.NewElement.IsGroupingEnabled)
                {
                    var groupedTableView = new UITableView(Control.Frame, UITableViewStyle.Grouped);
                    groupedTableView.Source = Control.Source;

                    SetNativeControl(groupedTableView);
                }
            }
        }
    }
}

这是我的ViewCellRenderer:

[assembly: ExportRenderer(typeof(ViewCell), typeof(CustomAllViewCellRendereriOS))]
namespace OdontoWayPaciente.Mobile.iOS.Renderers
{
    public class CustomAllViewCellRendereriOS : ViewCellRenderer
    {
        public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tableView)
        {
            var cell = base.GetCell(item, reusableCell, tableView);

            if (cell != null)
            {
                cell.SelectionStyle = UITableViewCellSelectionStyle.None;
            }

            if (tableView.Style == UITableViewStyle.Grouped)
            {
                cell.TintColor = UIColor.Blue;
                cell.BackgroundColor = UIColor.Blue;
            }


            return cell;
        }
    }
}

这是我的ViewCell XAML代码:

 <ViewCell Height="{StaticResource listItem_alturaLinhaUnica}"
          StyleId="disclosure">
    <ContentView>
        <ContentView.BackgroundColor>
            <OnPlatform x:TypeArguments="Color" iOS="White"/>
        </ContentView.BackgroundColor>
        <AbsoluteLayout VerticalOptions="Center" BackgroundColor="White">
            <Label
                Text="{Binding TextoAcesso}" 
                Style="{DynamicResource TextoPrimario}">
                <Label.Margin>
                    <OnPlatform x:TypeArguments="Thickness">
                        <On Platform="iOS" Value="18, 8, 0, 8"/>
                    </OnPlatform>
                </Label.Margin>
            </Label>
        </AbsoluteLayout>
    </ContentView>
</ViewCell>

1 个答案:

答案 0 :(得分:1)

请检查您的ListView&#39; ItemsSourceListView应至少有一个单元格,然后调用CustomViewRenderer。

  

如果我使用ListView与GroupingEnabled = True,则CustomViewRenderer不是   调用,但GroupingEnabled = false,调用CustomViewCellRenderer

您是否只是在ItemsSource中添加了一些组:new List<Group> { group1, group2 };,但每个组都不包含任何项目。当您将IsGroupingEnabled设置为false时,ListView在这种情况下有两个单元格,因此调用渲染器。但是如果IsGroupingEnabled为真,则ListView只有两个没有任何单元格的部分,则不会调用渲染器。