データの変更を除いて、同じサブビュー数のスクロールビューを作成しようとしています。私がプログラム的にすべてをやりたいのであれば、そうすることができます:iOS:View Controllerを使用せずにXIBを使用してプログラムでプログラムを作成する方法
int width = 110;
int count = 0;
self.scrollView.contentSize=CGSizeMake(width*[items count],100);
for (NSString *id in items) {
Item *item = [items objectForKey:id];
CGRect frame = CGRectMake(count*width, 0, 100, 100);
UIView *itemSubview = [[UIView alloc] initWithFrame:frame];
CGRect dataLabelFrame = CGRectMake(0, 52, 35, 30);
UILabel* dataLabel = [[UILabel alloc] initWithFrame: dataLabelFrame];
dataLabel.text = @"Data specific to item"; // item.property or something
dataLabel.font:[UIFont systemFontOfSize:30];
dataLabel.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0];
[itemSubview addSubview:dataLabel];
[self.scrollView addSubview:itemSubview];
[itemSubview release];
}
すべていいです。さて、私のサブビューがもう少し複雑で、Interface Builderとxibアーカイブを使ってレイアウトしたいのであれば、同じことをどうやって行うのですか?これまでのところ私がしている:
- は、私のXIBファイルを作成したクラスItemSubviewのものであると、ファイルの所有者を設定し、私をフックアップIBOutlet NSStringの* dataLabel
- でのUIViewを拡張し、独自のカスタムビューコード、ItemSubviewを作成しました私はこれを行うと、私のitemSubviewが描かれます
int width = 110; int count = 0; self.scrollView.contentSize=CGSizeMake(width*[items count],100); for (NSString *id in items) { Item *item = [items objectForKey:id]; CGRect frame = CGRectMake(count*width, 0, 100, 100); ItemSubview *itemSubview = [[ItemSubview alloc] initWithFrame:frame]; [itemSubview setBackgroundColor:[UIColor colorWithRed:0.0 green:0.2 blue:0.0 alpha:0.2]]; // to see where it ends up [[NSBundle mainBundle] loadNibNamed:@"ItemSubview" owner:itemSubview options:nil]; itemSubview.dataLabel.text = @"Data specific to item"; // item.property or something [self.scrollView addSubview:itemSubview]; [itemSubview release]; }
(私はitemSubviewの背景色を見ることができます)ではなく:コード内で、
その後、コンセントにラベルを付けますxibアーカイブにあったdataLabel。私は何が逃しているのか、理解していないのかなぜこれはプログラムでは動作しますが、xibファイルでは動作しませんか?
これは助けになりました。 itemSubviewはバックグラウンドとサイズのxibから出てきましたが、まだdataLabelのサブ・サブビューが表示されませんでした。 (xibに設定されているデフォルト値さえありません)。ファイルの所有者は空白で、dataLabelのコンセントはitemSubview(xibの唯一のトップレベルオブジェクト)に接続されています。デバッガにはラベルが正しい値で表示されていますが、画面に表示されません。うーん... – meriial
それは奇妙です。 ItemSubviewクラスにNSString *であるIBOutletがあると書いてあることに気付きました。それはUILabel *であってはなりませんか?私はそれがおそらく質問のtypoだと思う。これを試すことができます:xibファイルを完全に削除し、Xcodeを再起動してxibファイルを再作成します。いつかXcodeがちょうどうんざりします。それ以外の場合は、サブビュー、ItemSubviewクラス、およびxibファイルのイメージを追加するために使用している正確なコードを投稿してください。 – Darren
私の問題は、[itemSubview release]でした。だから、それを削除して、すべてが良いです。 – meriial