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

編集の要約なし
編集の要約なし
1行目: 1行目:
Xamarin.iOSに搭載されるiOSデザイナーでは、標準コンポーネント(コントロール)に加え、自作のコンポーネントやXamarin Component Storeは販売配布されているコンポーネントを使用できるようだ。
[[Xamarin.iOS]]に搭載されるiOSデザイナーでは、標準コンポーネント(コントロール)に加え、自作のコンポーネントやXamarin Component Storeは販売配布されているコンポーネントを使用できるようだ。
<ref>http://developer.xamarin.com/guides/ios/user_interface/designer/custom_components/</ref>
<ref>http://developer.xamarin.com/guides/ios/user_interface/designer/custom_components/</ref>


41行目: 41行目:
         }
         }
     }
     }
</source>
==ライブラリ化==
カスタムコントロールを別プロジェクトとしてライブラリ化すると実行時にエラーログが表示され正常に動かない。
*「Unknown class MyClass in Interface Builder file.」
これはxibファイル(storyboardファイル)がロードされたタイミングで外部アセンブリがロードされていないないため発生しているようだ。
外部アセンブリはそこに含まれるクラスやメソッドなどの何かしらを最初に使ったタイミングでロードされるようだ。
そこでライブラリプロジェクトに以下のような静的ダミーメソッド・ダミークラスを追加しておき、Xamarin.iOSプロジェクトのMainメソッドから真っ先に呼び出してやることで解決する。もっとまともな解決策があるのかもしれないが知らん。
ライブラリプロジェクト側
<source lang="csharp">
namespace MonoBook.iOS
{
    public static class Loader
    {
        public static bool Link() => true;
    }
}
</source>
Xamarin.iOSプロジェクト側
<source lang="csharp">
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");
        }
    }
}
</source>
</source>