0

viewcontoller の xib または stroy ボードに (xib を使用して) カスタム ビューをロードしたいだけです。同じことを行うためのベスト プラクティスは何ですか。

以下のawakeAfterUsingCoder関数コードを使用しました。

(id) awakeAfterUsingCoder:(NSCoder*)aDecoder
{
    BOOL theThingThatGotLoadedWasJustAPlaceholder = ([[self subviews] count] == 0);
    if (theThingThatGotLoadedWasJustAPlaceholder)
    {
        CustomView* theRealThing = (id) [CustomView view];
        theRealThing.frame = self.frame;
        theRealThing.autoresizingMask = self.autoresizingMask;
        return theRealThing;
    }
    return self;
}

しかし、この関数を使用した後、私のawakeFromNibは複数回呼び出しを開始しました。

提案してください。

4

1 に答える 1

0

あなたが知っているように、現在リンクされている正解は非常に複雑でバグがあります。これを行うには、より標準的で優れた方法があります。

  1. 空の XIB を作成する
  2. XIB に UIView を追加して、それが唯一の最上位オブジェクトになるようにします (プロキシの First Responder と File's Owner を除く)。
  3. 新しい UIView のクラスを CustomView に変更します
  4. XIB をインスタンス化し、次のように CustomView インスタンスを取得します。

    CustomView *view = [[UINib nibWithNibName:@"CustomView" bundle:nil] instantiateWithOwner:self options:nil][0];

  5. ビュー コントローラーの viewDidLoad メソッドでビュー階層に追加します。

    [self.view addSubview:view];

-initWithCoder:カスタム初期化を行う必要がある場合に備えて、必ず CustomView サブクラスでオーバーライドしてください。これは大変なことだと思いますので、これらの手順で混乱したり、行き詰まったりした場合はお知らせください。

于 2013-08-04T01:51:37.393 に答える