子类化元素将允许您通过覆盖 GetCell 方法来设置它的样式,但这会变得非常乏味。我遇到的最好的解决方案是通过继承它来制作一个自定义的 DialogViewController,并使用你自己的 SizingSource 和 GetCell() 方法覆盖 CreateSizingSource 方法,使用你想要的每个单元格场景的图像(顶部,中间,底部,独自的)。它有点代码,我的示例不会处理不均匀的行,但它是我见过的唯一不修改 MT.D 源代码的解决方案。
这是您将在 DialogViewController 子类中覆盖的内容:
public override Source CreateSizingSource(bool unevenRows)
{
return new CustomSource(unevenRows);
}
然后您将创建一个自定义源类:
public class CustomSource : Source
{
public CustomSource(DialogViewController parent) : base (parent)
{
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
var theCell = base.GetCell(tableView, indexPath);
if (RowsInSection(tableView, indexPath.Section) == 1) //use one with top and bottom rounded
{
theCell.BackgroundView = new UIImageView(Theme.CellBackgroundFull);
theCell.SelectedBackgroundView = new UIImageView(Theme.CellBackgroundFullActive);
} else if (indexPath.Row == 0) //top only
{
theCell.BackgroundView = new UIImageView(Theme.CellBackgroundTop);
theCell.SelectedBackgroundView = new UIImageView(Theme.CellBackgroundTopActive);
} else if (indexPath.Row+1 == RowsInSection(tableView, indexPath.Section)) // bottom only
{
theCell.BackgroundView = new UIImageView(Theme.CellBackgroundBottom);
theCell.SelectedBackgroundView = new UIImageView(Theme.CellBackgroundBottomActive);
} else //anything in the middle
{
theCell.BackgroundView = new UIImageView(Theme.CellBackgroundMiddle);
theCell.SelectedBackgroundView = new UIImageView(Theme.CellBackgroundMiddleActive);
}
return theCell;
}
}
Theme 只是一个返回 UIImages 的静态类,类似于 Xamarin 中的示例 Field Service 应用程序。所以在这里我总共制作了8张图片。4 表示元素的顶部、中间、底部和单独。每个都有不同的圆角以显示正确。然后是每个触摸时的“突出显示”版本。
这里最大的缺点是您必须为您需要的每个不同样式的控制器执行此操作。如果您可以修改 MT.D 源代码,您可以获得不同的解决方案,允许您在此处的部分级别控制它:http: //fastchicken.co.nz/2012/05/20/earnest-简报-视觉样式-in-ios-apps-uiappearence-custom-sections-in-monotouch-dialog/
这具有相同的效果,但是您只需要为每个不同的样式子类化 Section,这使得在一个 Root 中包含多个样式更容易。对此更改提出了拉取请求,但 Miguel 更喜欢第一个解决方案,见此处:https ://github.com/migueldeicaza/MonoTouch.Dialog/pull/180