コンポーネントをXIBファイルで外部化したので、いくつかの異なるビューで再利用できます。次に、View Controllerで、XIBベースのUIViewをロードし、次の方法で現在のビューに追加します。
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ThumbsPreviewView" owner:self options:nil];
_likePreview = [views objectAtIndex:0];
[self.view addSubview:_likePreview];
最初は、機能していないと思っていましたが、実際には機能していますが、ルートビュー(つまり、透明なすべてのグラフィカルコンポーネントのコンテナ)をビューに配置するだけです。
だから私はそれを機能させるために(すべてのサブコンポーネントに対して)この種のコードを置く必要があります:
[self.view addSubview:_likePreview];
NSArray *subviews = _likePreview.subviews;
for(UIView * subview in subviews) {
[self.view addSubview:subview];
}
これは非常に直感に反し、さらに、私が望むビュー階層を作成しないと思います。
XIBからカスタムテーブルヘッダーをロードするためにUITableViewControllerで同じ種類のことを行ったので、解決策があると確信しています。この状況でまったく同じXIBファイルを使用すると、すべてが正しくロードされます。コードは次のとおりです。
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
switch(section) {
case 0: {
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ThumbsPreviewView" owner:self options:nil];
_likePreview = [views objectAtIndex:0];
return _likePreview;
}
}
return [super tableView:tableView viewForHeaderInSection:section];
}
上記のコードでは、すべてが正常であり、テーブルセクションのヘッダーとしてビュー全体(=すべてのコンテンツを含むルートビューコンテナ)を取得しました。
したがって、問題は次のとおりです。最初の例で何が間違っているのでしょうか。すべてのコンテンツ(コンテナ+すべてのコンテンツ)を適切なUIView階層として親UIViewに追加するにはどうすればよいですか?
編集:次のように、すべてが単一のルートUIViewのXIBファイルに整理されていることを正確にする必要があります(画像を投稿できません):
* Thumbs preview view
|_ Button
|_ Image View
|_ Image View
|_ Image View
|_ Image View
|_ Button
|_ Button
|_ Button
|_ Label
ご助力ありがとうございます !
クリストフ