web-dev-qa-db-ja.com

StoryBoardのViewControllerで使用されるUIViewのNibをロードします

複数のViewControllerで使用したいUIViewがあるので、ビュー(.h/.m)とそのnibファイルを作成しました。ストーリーボードでは、ビューはビューコントローラにサブビューとして追加されますが、nibで定義されているようにレイアウトをロードしていません。

ストーリーボードのビューコントローラー内で使用されるUIViewのペン先をロードすることは可能ですか?

20
tiltem

ストーリーボードを編集するときにInterfaceBuilderで.xibコンテンツを表示するについて尋ねると、それは不可能です。ただし、実行時にロードする必要がある場合は、可能

  • .h/.mにはIViewサブクラスが含まれている必要があります
  • 。xib設定する必要のあるファイルファイルの所有者Identity Inspector-> Custom Class)with your custom UIView subclass
  • in 。h file add @property (strong, nonatomic) IBOutlet UIView* view;を追加し、ViewコンテナをInterface Builderからこのフィールドに接続します(Ctrl + Viewのクリックとドラッグ.hの上記のviewプロパティへの接続
  • 他のサブビューを。hに接続します
  • 。m配置する必要のあるファイル

- (void)awakeFromNib {
    NSString* nibName = @"Place here your Nib name without extension";
    if ([[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]) {
        [self.view setFrame:[self bounds]];
        [self addSubview:self.view];
    }
}

それで全部です。 ストーリーボードシーンに表示を移動し、カスタムクラスFooViewに変更し、View Controllerコードに.hをインポートして、-を使用します。 IBOutlets必要に応じて。

幸せなコーディングを

[〜#〜]編集[〜#〜]

awakeFromNibdocumentation によると、awakeFromNibではそのようなコードを避ける必要があることに注意してください。

ファイルの所有者オブジェクトとそれに関連するnibファイルの間で1対1の対応を維持することをお勧めします。同じファイルのOwnerオブジェクトで2つのnibファイルをロードすると、そのオブジェクトのawakeFromNibメソッドが2回呼び出され、一部のデータ構造が望ましくない方法で再初期化される可能性があります。また、awakeFromNibメソッドの実装から他のnibファイルをロードしないようにすることをお勧めします。

18
Anton Gaenko

ビューにViewInNibという名前を付けると、次のようになります。

  1. ViewInNib.h
  2. ViewInNib.m
  3. ViewInNib.xib

ストーリーボードで、placeholderUIViewコンポーネントをViewControllerに配置し、クラスViewInNibを設定してから、ViewInNib.mに設定することを忘れないでください。

static BOOL isReplaced = NO;
- (id)awakeAfterUsingCoder:(NSCoder *)aDecoder
{
    if (!isReplaced) 
    {
        isReplaced = YES;
        ViewInNib *replaced = [[[NSBundle mainBundle] loadNibNamed:@"ViewInNib" owner:nil options:nil] lastObject];
        replaced.frame = self.frame;
        replaced.translatesAutoresizingMaskIntoConstraints = NO;
        return replaced;
    }
    isReplaced = NO;
    return self;
}

この方法では、ストーリーボードのビューからペン先からロードされた実際のビューを置き換えます。それが役に立てば幸い。

10
sunnyxx

xXNibBridgeを使用します。

https://github.com/sunnyxx/XXNibBridge

使い方はとても簡単で、Swiftでも動作します。完全なクレジットは@sunnyxxに送られます

4
Robert Wagstaff