4

ストーリーボード上のいくつかの異なるビュー コントローラーにカスタム ビュー コントローラー クラスをアタッチできることはわかっていますが、それ以外の方法で実行することはできます。つまり、状況に応じて、さまざまなカスタム クラスを、次を使用してインスタンス化されるストーリーボード上の単一のビュー コントローラーにバインドしたいと考えています。

[self.storyboard instantiateViewControllerWithIdentifier:]

背景:以前は、ストーリーボードにほとんど同じビュー コントローラーがいくつかありました。実際、それぞれがバインドするカスタム クラスも非常に似ています。これを解決するために、カスタム クラスを 1 つの基本クラスといくつかのサブクラスにリファクタリングしました。次に、ストーリーボードから同様のビュー コントローラーをすべて削除し、基本クラスにバインドしたものを 1 つだけ残しました。次に、次のように呼び出します。

MySubclass* mySubclass = [self.storyboard instantiateViewControllerWithIdentifier:@"StoryboardControllerBoundToBaseClass"];

残念ながら、サブクラスのコードは無視され、基本クラスのコードだけが実行されます。ストーリーボードでView Controllerを複製し、それぞれを別のサブクラスにバインドせずに機能させる方法を知っている人はいますか?

4

3 に答える 3

2

不可能です。MySubclass *object = something と言ったからといって、 object が魔法のように MySubclass オブジェクトに変換されるわけではありません。ストーリーボードのコンパイル時に割り当てられたクラスと一緒にストーリーボードに保存されます。

于 2012-11-13T23:39:58.463 に答える
1

サブクラス化を使用するのではなく、デリゲート/プロキシ モデルを使用して、ストーリーボードでビュー コントローラーを再利用できると考えています。より具体的には、ストーリーボードのビュー コントローラーをカスタム クラスにバインドし、そのすべてのメソッド/イベントを他のクラスに委譲して処理することができます。これはサブクラス化ほどエレガントではありませんが、少なくとも、ほとんど同じビュー コントローラーの複数のコピーを保持する必要がないため、ストーリーボードをスリムに保つことができます。さらに、起動するためにこれらのコントローラーのすべてのコピーに将来の変更を複製する必要はありません。

于 2012-11-15T01:24:55.327 に答える
0

As guylegend writes. Apple doesn't support the way to do that. There are many workarounds e.g. with delegates but I finally found the answer and answered in another topic. Hope it helps! https://stackoverflow.com/a/32103618/1943053

于 2015-08-19T19:10:06.160 に答える