2009-11-17 19 views
9

私はこれをできる限り短くしようとします。インターフェイスビルダーを使用したカスタムクラス/ XIBのネスト

私はUIViewをいくつかのIBOutletプロパティで拡張し、IBOutletがリンクされている場所に関連付けられたXIBを持つカスタムクラスを作成しました。

私はそのクラスを取り込み、他のXIB(例えばテーブルセル)に埋め込み、それを動作させたいと思っています。

私は新しいXIBにそのカスタムクラスを埋め込むと、関連付けられた元のXIBを認識しないので、IBOutletsを新しいXIBのインターフェイス要素にリセットするように求められます。これは不自由です。

私は何をしようとしているのか理解していて、良いアプローチをしていますか?

答えて

8

は、私は、この作品を作るために管理方法は次のとおりです。Interface Builderで


あなたの外側のペン先を開き、次の操作を行います。

  • は、あなたが欲しいのスペースを定義するためのUIViewを追加します。内側のペン先を表示します。
  • ライブラリからUIViewControllerオブジェクトを追加し、そのNib Nameプロパティを(拡張子なしの)内側nibファイルの名前に設定します。
  • これら2つのアイテムのIBOutletを外部ビューコントローラに作成し、ワイヤードアップします。 (私はinnerViewinnerViewControllerとしてそれらを参照することになります。)
  • だけで接続されていないそれらを残して、あなたの外側のnibファイルで何かにあなたの内側のビューコントローラで定義されたIBOutletsのいずれかを接続しないでください。あなたの外側のペン先がカスタムUITableViewCellのであれば、

    [self.innerView addSubview:self.innerViewController.view]; 
    self.innerViewController.view.frame = CGRectMake(0, 0, self.innerView.frame.size.width, self.innerView.frame.size.height); 
    

    あなたawakeFromNibでこれらの行を置く:Xcodeで

あなたの外側のView ControllerののviewDidLoad方法で
、これらの2行を追加します代わりに
メソッド。

ビルド&実行!

+0

これはOS X上で同じように機能し、UIクラスをNSの同等物で置き換えるだけです。 – Mark

1

純粋にコードのUIViewControllerで使用するために、単にUIViewをペン先に置いていると仮定します。 Appleはこれをdetached nib fileと呼んでいます。

詳細についてはリンク先のガイドと、これを動作させる方法の例を参照してください。

Interface Builderで別のビュー内にビューを埋め込む場合、親ビューにはadd a UIView element from the Libraryset its class in the Inspectorにする必要があります。埋め込みビューのクラスが設定されると、IBOutletsが表示されます。ここで

+1

最初の文は、私がやっていることではありません。クラス自体はUIViewであり、UIImageViewとUIActivityIndi​​catorが含まれています。その最後の文は正しいですが、残念ながら正しく動作しません。 IBOutletsをジャックアップします。 –

関連する問題