2

私はObjective-Cを学んでいて、私には意味をなさない何かに出くわしました。

ストーリーボードにビューコントローラー(VC)が描画されている場合、instantiateViewControllerWithIdentifierを使用してストーリーボードIDに文字列を入力することで(ストーリーボードのVCをクリックします。ユーティリティサイドバーの[Identity Inspector]タブの[Identity]セクションで)コードを介してこのVCを呼び出すことができます。方法。

私の例では、ストーリーボードにスタンドアロンのUIViewControllerを描画し、ストーリーボードIDを「orderList」に設定しました。コードでは、このビューをこのコードCode1で呼び出すことができます:

UIViewController *ordersVC = [self.storyboard instantiateViewControllerWithIdentifier:@"orderList"];

「SCVCOrders」というUIViewControllerのサブクラスを作成し、その中に外観を変更するコードを挿入すると、タイトルの設定や背景色の変更など、このコードCode2を使用して描画されたVCを組み合わせることができると思いましたSCVCOrdersのコードで:

SCVCOrders *ordersVC = [self.storyboard instantiateViewControllerWithIdentifier:@"orderList"];

しかし、それはそれらを組み合わせません。ストーリーボードに描かれているものだけを使用します。次に、ストーリーボードで、描画されたVCのクラスをSCVCOrdersに設定します。これで、 Code2は結合された外観を提供しますが、Code1も同様です。これからの私の結論は、ストーリーボードがインスタンス化コードよりも優先されているということです。Xcodeは、ビューをコーディングするクラスを気にせず、ストーリーボードでこれを確認します。これは正しいです?

ストーリーボードで描いたものの上にコードを重ねる機能があると便利だと思います。私の例を使用して、描画したVCをジェネリッククラスのままにしておきます。そして、Code2を使用して、描画されたVCの上にコードを重ねます。または、他にどのようにこのようなことを達成できますか?

4

1 に答える 1

2

instantiateViewControllerWithIdentifierストーリーボードに保存されているクラスを返します。このメソッドによって返されたクラスを別のクラスタイプのポインターに格納しても、実際のオブジェクトの種類は変わりません。

つまり、あなたが魚を持っていて、それを虎と呼んでも、それが本当に魚であるという事実は変わりません。

于 2013-03-05T18:37:02.953 に答える