Xamarin.iOS のiPhone アプリ開発では、xib 形式で storyboard にて部品を作成し、実行時にビューに xib を追加する方法があります。
いくつか方法がありそうですが、自分がうまくいった方法をご紹介します。
なお、説明は Vitual Studio for Mac ベースですが、通常の Visual Studio でも同じでしょう。
まず、ビューを xib 形式で作成します。
プロジェクトを右クリックして、追加 > 新しいファイル > iOS > ビュー、から「MyView」というビューを作成します。
ビューの作成が済むと、ソリューションエクスプローラーに「MyView.xib」というファイルが作成されます。
この xib ファイルを表示するし、File’s Owner の Class プロパティに「MyView」と入力して Enterキーを押します。すると「MyView.cs」ファイルが作成されます。
最初の時点での「MyView.cs」は以下のように NSObject を継承していますが、これを UIView を継承するように変更し、他にも追記します。
using Foundation; using System; namespace MyView { public partial class MyView : NSObject { public MyView (IntPtr handle) : base (handle) { } } }
上記を以下のように変更します。
using System; using UIKit; using Foundation; namespace MyView { public partial class MyView : UIView { public MyView (IntPtr handle) : base (handle) { } public static MyView Create() { var arr = NSBundle.MainBundle.LoadNib("MyView", null, null); var v = arr.GetItem<MyView>(0); return v; } } }
「MyView.xib」を表示して、View の背景色を変更し、ラベルを配置します。
sotyboard で、ビューコントローラに View を追加します。
View の Class プロパティに「MyView」を設定します。
「ViewController.cs」にビューのロードが終わったときに、xib を読み込み追加するよう設定します。
namespace MyView { public partial class ViewController : UIViewController { private MyView v; protected ViewController(IntPtr handle) : base(handle) { } public override void ViewDidLoad() { base.ViewDidLoad(); v = MyView.Create(); v.Frame = View.Frame; View.AddSubview(v); } public override void DidReceiveMemoryWarning() { base.DidReceiveMemoryWarning(); } } }
これでデバッグ実行すると、以下のように xib で作成したビューが表示されるのでうまくいきましたね。