Я пытаюсь создать пользовательский вид, расширяя его из класса UIView. Все примеры, которые я нахожу, переопределяют метод Draw, но мне не нужно рисовать что-то, что мне нужно, чтобы заполнить представление другими представлениями/элементами управления, когда это делается в ViewDidLoad в контроллере, это прекрасно работает, но как только я попробуйте сделать это Custom-класс, все пойдет не так ... Насколько я мог найти, при создании «сложных» видов нужно переопределить метод LayoutSubViewsMonotouch: Как сделать многоразовый составной вид
Что такое представление как подпункт, это не имеет значения. просто пример:
[Register ("PhotoLabel")]
общественного класса PhotoLabel: UIView {
public PhotoLabel() : base() {} public PhotoLabel (IntPtr p) : base (p) {} public PhotoLabel (RectangleF rect) : base (rect) {} public override void LayoutSubviews() { base.LayoutSubviews(); if (Image != null) { AddSubviews (ImageView, Label); } else { AddSubview (Label); } } public UIImage Image { get { return ImageView.Image; } set { ImageView.Image = value; SetNeedsDisplay(); } } UIImageView ImageView { get { var iFrame = new RectangleF (0, 0, this.Frame.Height, this.Frame.Height); return new UIImageView() { Frame = iFrame, ContentMode = UIViewContentMode.Center, Image = this.Image.Scale (new SizeF (iFrame.Width, iFrame.Height)) }; } } public string Text { get { return Label.Text; } set { Label.Text = value; SetNeedsDisplay(); } } UILabel Label { get { var x = Image != null ? this.Frame.Height : 0; var width = Image != null ? this.Frame.Width - this.Frame.Height : this.Frame.Width; var lFrame = new RectangleF (x, 0, width, this.Frame.Height); return new UILabel() { Frame = lFrame, ContentMode = UIViewContentMode.Center, TextAlignment = UITextAlignment.Left, Text = this.Text, Font = UIFont.BoldSystemFontOfSize (17), BackgroundColor = UIColor.Clear }; } } }
И я пытался использовать его в качестве такового:
public override void ViewDidLoad() { base.ViewDidLoad(); var pLabel = new PhotoLabel() { Frame = new RectangleF (5,5, 100, 60), Image = UIImage.FromFile ("photo.png"), Text = "some text" }; this.View.AddSubview (hCell); }
Guess я с видом что-то, я очень хорошо знаю, как сделать это в Android (monodroid), но поскольку я довольно новичок в iOS и MonoTouch, я понятия не имею, что я делаю неправильно здесь. Поэтому, если кто-нибудь может направить меня или предоставить мне рабочий пример этого или что-то подобное, это будет оценено.