mirror of
https://github.com/bitwarden/mobile
synced 2025-12-27 05:33:23 +00:00
91 lines
3.5 KiB
C#
91 lines
3.5 KiB
C#
using Bit.App.Controls;
|
|
using Bit.iOS.Controls;
|
|
using UIKit;
|
|
using Xamarin.Forms;
|
|
using Xamarin.Forms.Platform.iOS;
|
|
using CoreGraphics;
|
|
|
|
[assembly: ExportRenderer(typeof(ExtendedTextCell), typeof(ExtendedTextCellRenderer))]
|
|
namespace Bit.iOS.Controls
|
|
{
|
|
public class ExtendedTextCellRenderer : TextCellRenderer
|
|
{
|
|
public override UITableViewCell GetCell(Cell item, UITableViewCell reusableCell, UITableView tv)
|
|
{
|
|
var extendedCell = (ExtendedTextCell)item;
|
|
var cell = base.GetCell(item, reusableCell, tv);
|
|
|
|
if(cell != null)
|
|
{
|
|
cell.BackgroundColor = extendedCell.BackgroundColor.ToUIColor();
|
|
if(extendedCell.ShowDisclousure)
|
|
{
|
|
cell.Accessory = UITableViewCellAccessory.DisclosureIndicator;
|
|
if(!string.IsNullOrEmpty(extendedCell.DisclousureImage))
|
|
{
|
|
var detailDisclosureButton = UIButton.FromType(UIButtonType.Custom);
|
|
detailDisclosureButton.SetImage(UIImage.FromBundle(extendedCell.DisclousureImage), UIControlState.Normal);
|
|
|
|
try
|
|
{
|
|
detailDisclosureButton.SetImage(UIImage.FromBundle(extendedCell.DisclousureImage + "_selected"), UIControlState.Selected);
|
|
}
|
|
catch
|
|
{
|
|
detailDisclosureButton.SetImage(UIImage.FromBundle(extendedCell.DisclousureImage), UIControlState.Selected);
|
|
}
|
|
|
|
detailDisclosureButton.Frame = new CGRect(0f, 0f, 50f, 100f);
|
|
detailDisclosureButton.TouchUpInside += (sender, e) =>
|
|
{
|
|
extendedCell.OnDisclousureTapped();
|
|
};
|
|
cell.AccessoryView = detailDisclosureButton;
|
|
}
|
|
}
|
|
|
|
WireUpForceUpdateSizeRequested(item, cell, tv);
|
|
UpdateLineBreakMode(cell.DetailTextLabel, extendedCell.DetailLineBreakMode);
|
|
}
|
|
|
|
return cell;
|
|
}
|
|
|
|
private void UpdateLineBreakMode(UILabel label, LineBreakMode lineBreakMode)
|
|
{
|
|
if(label == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch(lineBreakMode)
|
|
{
|
|
case LineBreakMode.NoWrap:
|
|
label.LineBreakMode = UILineBreakMode.Clip;
|
|
label.Lines = 1;
|
|
break;
|
|
case LineBreakMode.WordWrap:
|
|
label.LineBreakMode = UILineBreakMode.WordWrap;
|
|
label.Lines = 0;
|
|
break;
|
|
case LineBreakMode.CharacterWrap:
|
|
label.LineBreakMode = UILineBreakMode.CharacterWrap;
|
|
label.Lines = 0;
|
|
break;
|
|
case LineBreakMode.HeadTruncation:
|
|
label.LineBreakMode = UILineBreakMode.HeadTruncation;
|
|
label.Lines = 1;
|
|
break;
|
|
case LineBreakMode.MiddleTruncation:
|
|
label.LineBreakMode = UILineBreakMode.MiddleTruncation;
|
|
label.Lines = 1;
|
|
break;
|
|
case LineBreakMode.TailTruncation:
|
|
label.LineBreakMode = UILineBreakMode.TailTruncation;
|
|
label.Lines = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|