我无法在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;
}
}
}
我希望背景透明。
答案 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;
}
}
}
答案 2 :(得分:0)
我尝试了你的代码,它运行正常。
我刚才更改了导出渲染器:
[assembly: ExportRenderer(typeof(ViewCell), typeof(NoSelectionViewCellRenderer))]
我确认断点被击中并且运行正常。我评论了这一行
cell.SelectionStyle = UITableViewCellSelectionStyle.None;
所选背景为红色。你的代码很好!