UIView クラスから拡張して、カスタム ビューを作成しようとしています。私が見つけたすべての例はDrawメソッドをオーバーライドしますが、何も描画する必要はありません.ビューを他のビュー/コントロールで埋める必要があるだけです.コントローラーのViewDidLoadで実行すると、これは正常に機能しますが、カスタムクラスにしようとすると、問題が発生します...私が見つけることができる限り、「複合」ビューを作成するときは、LayoutSubViewsメソッドをオーバーライドする必要があります
ビューがサブビューとして持っているものは無関係です。これは単なる例です:
【登録(「PhotoLabel」)】
public class 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); }
私は何かを見落としていると思います.Android(モノドロイド)でそれを行う方法をよく知っていますが、iOSとMonoTouchにかなり慣れていないので、ここで何が間違っているのかわかりません. したがって、誰かが私に指示したり、これまたは似たような実際の例を提供したりできる場合は、それをいただければ幸いです。