Xamarin.iOSのiOSデザイナーでカスタムコントロールを使用する

提供: MonoBook
ナビゲーションに移動 検索に移動

Xamarin.iOSに搭載されるiOSデザイナーでは、標準コンポーネント(コントロール)に加え、自作のコンポーネントやXamarin Component Storeは販売配布されているコンポーネントを使用できるようだ。 [1]

要件[編集 | ソースを編集]

カスタムコンポーネントをデザイン領域上で扱えるようにするには以下の条件を満たす必要がある。

  1. MonoTouch.UIKit.UIViewまたはMonoTouch.UIKit.UIViewControllerを直接または間接的に継承していること。
  2. Objective-Cにクラス登録するためMonoTouch.Foundation.RegisterAttributeを持つこと。
  3. デフォルトコンストラクタ引数のないコンストラクタ)と、引数IntPtrを持つコンストラクタを持つこと。

こんな感じか。

    using System;
    using System.Drawing;
    using MonoTouch.Foundation;
    using MonoTouch.UIKit;

    [Register("MBButtonEx")]
    public class MBButtonEx : UIButton
    {

        public MBButtonEx() {}

        public MBButtonEx(IntPtr handle)
            : base(handle) {}

        public MBButtonEx(RectangleF frame)
            : base(frame)
        {
            InitUI();
        }

        public override void AwakeFromNib()
        {
            base.AwakeFromNib();
            InitUI();
        }

        void InitUI() 
        {
            this.TitleLabel.Text = "押せ!";
        }
    }

ライブラリ化[編集 | ソースを編集]

カスタムコントロールを別プロジェクトとしてライブラリ化すると実行時にエラーログが表示され正常に動かない。

  • 「Unknown class MyClass in Interface Builder file.」

これはxibファイル(storyboardファイル)がロードされたタイミングで外部アセンブリがロードされていないないため発生しているようだ。 外部アセンブリはそこに含まれるクラスやメソッドなどの何かしらを最初に使ったタイミングでロードされるようだ。

そこでライブラリプロジェクトに以下のような静的ダミーメソッド・ダミークラスを追加しておき、Xamarin.iOSプロジェクトのMainメソッドから真っ先に呼び出してやることで解決する。もっとまともな解決策があるのかもしれないが知らん。

ライブラリプロジェクト側

namespace MonoBook.iOS
{
    public static class Loader
    {
        public static bool Link() => true;
    }
}

Xamarin.iOSプロジェクト側

namespace IOSApp01
{
    public class Application
    {
        // This is the main entry point of the application.
        static void Main(string[] args)
        {
            // ダミーメソッドを呼び出す
            MonoBook.iOS.Loader.Link();

            // if you want to use a different Application Delegate class from "AppDelegate"
            // you can specify it here.
            UIApplication.Main(args, null, "AppDelegate");
        }
    }
}

デバッグ[編集 | ソースを編集]

カスタムツールボックスアイテム[編集 | ソースを編集]

カスタムプロパティ[編集 | ソースを編集]

注意事項[編集 | ソースを編集]

関連項目[編集 | ソースを編集]

類似項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]