0

NSClassFromStringを使用してビューコントローラを割り当てます。しかし、これでは代理人を自分自身に設定することはできません。出来ますか?

nibString = @"ViewControllerName";
Class viewControllerClass = NSClassFromString( nibString );
loadedVC = (UIViewController*) [[viewControllerClass alloc] initWithNibName:nibString bundle:nil];
[loadedVC setDelegate:self];

最後の行は、「UIViewController」のvisible@interfaceがセレクター「setDelegate」を宣言していないことを報告しています

プロパティを介してvcを割り当てると機能することは確かですが、便宜上このメソッドを使用します。ただし、setにデリゲートを与えることができれば、停止する必要があります。

誰かが解決策を提案できますか?

4

2 に答える 2

1

UIViewControler クラスにはデリゲート プロパティがありません。通常、ビュー コントローラーをビューのデリゲートとして設定するため、setDelegate はコントローラーではなくビューで呼び出されます。

デリゲートをサポートするView Controllerサブクラスがある場合、loadedVC参照がUIViewControlerにキャストされているため、コンパイラには表示されません。これが問題である場合、いくつかの解決策があります。

1) 使用するクラス、またはデリゲートを実装する最初のスーパークラスにキャストできます。

2) 公式または非公式のプロトコルを使用できます。

3) RespondsToSelector: を呼び出し、続いて performSelector:withObject: を呼び出すことができます。

于 2013-04-06T02:58:29.390 に答える