我编写了一个generig Monotouch.Dialog元素来显示一个图像(不显示图像选择器),我重用了UIViewElement和ImageElement中的代码,添加了一些参数因此它可以在登录屏幕中使用(例如显示公司徽标等)。自定义Monotouch.Dialog元素中的中心单元格内容
我有这个至今:
public class ImageViewElement : Element, IElementSizing
{
protected UIImage Image;
public CellFlags Flags = 0;
public UIViewContentMode Alignment;
public enum CellFlags {
Transparent = 1,
DisableSelection = 2,
Both = 3
}
/// <summary>
/// Constructor
/// </summary>
/// <param name="caption">
/// The caption, only used for RootElements that might want to summarize results
/// </param>
/// <param name="view">
/// The view to display
/// </param>
/// <param name="transparent">
/// If this is set, then the view is responsible for painting the entire area,
/// otherwise the default cell paint code will be used.
/// </param>
public ImageViewElement (UIImage image, bool transparent, bool selectable, UIViewContentMode alignment) : base ("")
{
this.Alignment = alignment;
this.Image = image;
if(transparent)
{Flags+=1;}
if(!selectable)
{Flags+=2;}
}
public override UITableViewCell GetCell (UITableView tv)
{
var cell = tv.DequeueReusableCell (CellKey);
if (cell == null)
{
cell = new UITableViewCell (UITableViewCellStyle.Default, CellKey);
cell.ContentMode = UIViewContentMode.BottomRight;
switch(Flags)
{
case CellFlags.Transparent:
cell.BackgroundColor = UIColor.Clear;
//
// This trick is necessary to keep the background clear, otherwise
// it gets painted as black
//
cell.BackgroundView = new UIView (RectangleF.Empty) {BackgroundColor = UIColor.Clear};
break;
case CellFlags.DisableSelection:
cell.SelectionStyle = UITableViewCellSelectionStyle.None;
break;
case CellFlags.Both:
cell.BackgroundColor = UIColor.Clear;
//
// This trick is necessary to keep the background clear, otherwise
// it gets painted as black
//
cell.BackgroundView = new UIView (RectangleF.Empty) {
BackgroundColor = UIColor.Clear};
cell.SelectionStyle = UITableViewCellSelectionStyle.None;
break;
}
cell.ImageView.ContentMode = Alignment;
cell.ContentMode = Alignment;
cell.ImageView.Image = Image;
}
return cell;
}
public float GetHeight (UITableView tableView, NSIndexPath indexPath)
{
return Image.Size.Height;
}
}
到目前为止的所有工作与对齐的异常,图像始终显示左,我试着在小区,在小区的ImageView的设置ContentMode但它不工作, 我能做什么?
编辑:米格尔指出我的界限可能设置不正确,所以我想这:
cell.ContentMode = UIViewContentMode.Right;
var test = new UIImageView(Image);
cell.ContentView.Add (test);
现在我的内容查看边界都是相同的细胞界限,0,0,320,40,他们是没有确定,但我只是在寻找着,我的测试范围是0,0,256,256,但对准仍然没有工作......说不上来怎么办
编辑:一些进展!
我问请教IRC
(2012-11-13 10:10:12) CENSORED: Implement a subclass of UITableViewCell
(2012-11-13 10:10:26) CENSORED: add the Image as a subview in the init method of the new class
(2012-11-13 10:10:33) CENSORED: and override layouSubviews
(2012-11-13 10:10:36) CENSORED: with the line:
(2012-11-13 10:10:56) CENSORED: imageView.Center = this.Center;
(2012-11-13 10:11:14) CENSORED: (call super first as well)
(2012-11-13 10:11:25) CENSORED: that way the image will always remain centred in the cell
(2012-11-13 10:38:23) CENSORED: AndreSM: UITableViewCell already has a UIImageView property (named ImageView)
(2012-11-13 10:38:36) CENSORED: you can just use that instead of creating a new one
所以我说干就干,创建一个子类:
public class ImageViewCell: UITableViewCell
{
UIImage cellImage;
public ImageViewCell (UIImage image, NSString key) : base(UITableViewCellStyle.Default, key)
{
cellImage = image;
ImageView.Image = cellImage;
}
public override void LayoutSubviews()
{
base.LayoutSubviews();
ImageView.Center = ContentView.Center;
ImageView.SetNeedsDisplay();
}
}
但图像还是有点偏离中心,这里是一个屏幕截图,让你可以我的意思:
我不明白这样做的原因,我检查什么是新的中心和值是正确的(160 X轴..)
那么什么是你究竟想实现,图片的排列或设置一个新的形象(我假设对齐? ) –
对齐,它应该是微不足道的,但图像不居中,我只是希望它在中心。这真的很奇怪,因为坐标是正确的 – Radius
中心不应该是160.屏幕宽度是320,并且从左侧和右侧插入contentview。因此,当单元格显示时contentview宽度不能为320,但应该更小 – svn