Xamarin表单:如何在listview,iOS中的所选项目上更改灰色背景

时间:2017-03-07 12:25:26

标签: ios listview xamarin xamarin.ios xamarin.forms

我无法在iOS上从灰色更改列表视图中所选项目的背景颜色。我使用的是Xamarin.Forms 2.3.4.192-pre2,之前我使用的是2.3.3,结果相同。

我试图刺穿自定义渲染器:

using App.Views.View.List;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(NoSelectionViewCell), typeof(App.iOS.Views.List.NoSelectionViewCellRenderer))]
namespace App.iOS.Views.List
{
    public class NoSelectionViewCellRenderer: ViewCellRenderer
    {
        public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
        {
            UITableViewCell cell = base.GetCell(item, reusableCell, tv);
            cell.SelectionStyle = UITableViewCellSelectionStyle.None; // This does nothing ...
            // cell.SelectionStyle = UITableViewCellSelectionStyle.Blue; // This does nothing ...
            // cell.SelectionStyle = UITableViewCellSelectionStyle.Default; // This does nothing ...
            // cell.SelectionStyle = UITableViewCellSelectionStyle.Gray; // This does nothing ...
            if (cell != null)
            {
                 cell.SelectedBackgroundView = new UIView
                 {
                     BackgroundColor = UIColor.Red, // This doesn't matter ...
                 };
            }

            UpdateBackground(cell, item); // This doesn't seem to do anything ...

            return cell;
        }
    }
}

我希望背景透明。

3 个答案:

答案 0 :(得分:1)

我在项目中所做的是选择项目后取消选择。它解决了您无法选择已选择项目的问题(例如,您选择一个项目,导航到新页面然后您导航回来并且该项目已被选中。在这种情况下,您无法重新选择相同的项目。) / p>

我就是这样做的:

private void ListView_OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    if (e.SelectedItem == null)
        return;

    //we do stuff here

    // We deselect the item so that the background is not greyed when we come back
    ListView.SelectedItem = null;
}

这是xaml

<ListView x:Name="ListView" 
              ItemSelected="ListView_OnItemSelected">
</ListView>

答案 1 :(得分:1)

不确定Apple / Xamarin是否修复了任何东西,但是没有选择样式对我来说肯定有用,包括在内,但请参阅工作示例项目:

using System;
using Xamarin.Forms.Platform.iOS;
using Xamarin.Forms;
using UIKit;
using ListviewNoSelection.Controls;

[assembly: ExportRenderer(typeof(NoSelectionCell), typeof(ListviewNoSelection.iOS.Renderer.NoSelectionCellRenderer))]
namespace ListviewNoSelection.iOS.Renderer
{
    public class NoSelectionCellRenderer : ViewCellRenderer
    {
        public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
        {
            UITableViewCell cell = base.GetCell(item, reusableCell, tv);
            cell.SelectionStyle = UITableViewCellSelectionStyle.None;

            return cell;
        }
    }
}

https://github.com/conrad90909/NoSelectionViewCell

答案 2 :(得分:0)

我尝试了你的代码,它运行正常。

我刚才更改了导出渲染器:

[assembly: ExportRenderer(typeof(ViewCell), typeof(NoSelectionViewCellRenderer))]

我确认断点被击中并且运行正常。我评论了这一行

cell.SelectionStyle = UITableViewCellSelectionStyle.None;

所选背景为红色。你的代码很好!