web-dev-qa-db-ja.com

ストーリーボードを使用して、xibまたは別のシーンからサブビューを追加します

IOSとXcodeは初めてです。ストーリーボードを使用して、分離されたビューを設計し、メインのUIViewControllerに追加する方法がわかりません。

私はさまざまなアプローチをしました。

  1. Xcodeの右下隅のウィンドウからUIオブジェクトを取得し、ストーリーボードの任意のスペース領域に配置するだけです。しかし、xibのようにUIオブジェクトをドロップすることはできません。
  2. 新しいUIViewControllerを追加します。 UIViewControllerにビューを追加します。メインのViewController.mで、viewDidLoadに新しいUIViewControllerインスタンスを取得してから、[self.view addSubview:newUIViewController.view]。しかし、追加されたビューが表示されません。
  3. 新しいxibファイルを作成しました。そして、それにビューを追加します。また、メインのViewControllerでインスタンスを取得しようとしています。そして、xibのビューでaddSubview。しかし、それも失敗しました。

そうするための正しい方法または実用的な解決策はありますか?

20
shiami

私はそれを行う方法を考え出しました。次のように説明されています:

  1. .xibファイルを作成します。例:MyView.xib
  2. Objective-cクラスを作成します。例:MyViewClass.hおよびMyViewClass.m
  3. .xibファイルの所有者をクラスに設定します。
  4. ストーリーボードにUIView要素を追加し、カスタムクラスをobjective-cクラス名(MyViewClass)に設定します。
  5. 重要な点は、object-cクラスのinitWithCoderメソッドをオーバーライドすることです。

    - (id)initWithCoder:(NSCoder *)aDecoder {
        if ((self = [super initWithCoder:aDecoder])) {
            [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] objectAtIndex:0]];
        }
        return self;
    }
    

カスタムクラスがストーリーボードによってロードされ、initWithCodeが呼び出されるという考え方です。インデックス0は、.xib InterfaceBuilderのルートビューです。

ちょっとトリッキーですが、うまくいきます。

36
shiami

ストーリーボードで、ViewControllerをドラッグアンドドロップします。ビューコントローラにはメインビューが付属しています。追加されたViewControllerの外側をクリックし、その中央をクリックして、そのメインビューを選択します。ここで、IBの場合と同じように、uiviewなどをメインビューにドラッグします。

0
T.J.