私は MonoTouch を使用しており、UIButton を拡張するクラス MyButton を作成しました。これは実際には、カスタム UIScrollViewで発生していた同じ問題の単純化された例です。MyButton は UIButton を拡張し、カウンターのインクリメントとデクリメントのような簡単なことを行ういくつかのメソッドを追加します (これは単なるテスト ケースです)。また、クラス定義の前に '[Register("MyButton")]' を含めて、Interface Builder (IB) に登録し、UIButton を追加してそのクラスを MyButton として指定できるようにします。
機能: MyButton のインスタンスをプログラムでメイン ビューに追加すると、正常に表示され、期待どおりに機能します。
うまくいかないこと: IB から UIButton を追加し、そのクラスを MyButton として指定しようとすると、アウトレットを追加し、それが MyButton タイプであることも指定すると、メイン ビューをロードしようとしているときにアプリがクラッシュし、例外が発生します: Unhandledマネージド例外: GC された (System.Exception) 型 iOSCustomUIView.MyButton (0xC2F40D0) のマネージド オブジェクトで、objective-c から呼び出されたセレクター。
この問題がある同様の質問を見つけましたが、ビューではなくビューコントローラーを使用しています。したがって、エラーが似ていることは理解していますが、View Controller の場合、新しいコントローラーをスタックにプッシュするときなどに参照が失われます。読み込まれました。
MyButton アウトレット (btnIncrement) を参照するために追加のプライベート メンバー変数を作成しようとしましたが、これは役に立ちませんでした。ブレークポイントを設定すると、View Controller の新しいインスタンスをインスタンス化しようとするとクラッシュが発生します: (AppDelegate.cs から)
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
window = new UIWindow (UIScreen.MainScreen.Bounds);
viewController = new iOSCustomUIViewViewController ();
window.RootViewController = viewController;
window.MakeKeyAndVisible ();
return true;
}
カスタム UIButton クラスを定義して IB で使用するために不足しているものはありますか? これは MonoTouch のバグですか?