'u kullanmadan programlı görünümler oluşturma nasıl yapılır? Veri değişikliklerini hariç, aynı görünümdeki bir dizi alt görünümle kaydırma görünümünü doldurmaya çalışıyorum. Eğer programatik olarak her şeyi yapmak istersem, şöyle yapabilirim:iOS: XIB kullanarak, ancak View Controller
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];
}
Tüm iyi. Şimdi, SubView'ım biraz daha karmaşıksa aynı şeyi nasıl yapabilirim ve Interface Builder ve bir xib arşiviyle onu düzenlemek isterim? Şimdiye kadar var:
- , bir IBOutlet NSString * dataLabel
- oluşturulan benim xib dosyasıyla UIView uzanan, kendi özel görünüm kodunu ItemSubview oluşturulan sınıf ItemSubview olması dosyanın sahibini ayarlayın ve bağladım benim bunu yaptığınızda, benim itemSubview çekilir
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]; }
(I itemSubview arka plan rengini görebilir) ama: kodunda,
sonra prize etiketlemek xib arşivinde bulunan dataLabel. Neyi özlüyorum/anlamadım? Bu neden programlı çalışıyor, fakat bir xib dosyasıyla çalışmıyor?
Bu yardımcı oldu. ItemSubview, arka plan ve boyutta xib'den çıktı, ancak hala dataLabel alt-alt görünümünde görüntülenmedi. (Xib'de ayarlanan varsayılan değer bile değil.) Dosyanın sahibi boş ve dataLabel'deki çıkış itemSubview'e (xib'deki tek üst düzey nesne olan) bağlanır. Hata ayıklayıcı, etiketin doğru değerde olduğunu, ancak ekranda görünmediğini söylüyor. Hmmm ... – meriial
Bu garip. ÖğeSubview sınıfının bir NSString * olan bir IBOutlet'i olduğunu yazdığınızı fark ettim. Bu bir UILabel * değil mi? Sanırım bu soruda muhtemelen bir yazım hatası. Bunu deneyebilirsiniz: xib dosyasını tamamen silin, Xcode'u yeniden başlatın ve xib dosyasını yeniden oluşturun. Bazen Xcode sadece berbat olur. Bunun dışında, belki de SubViews, ItemSubview sınıfı ve xib dosyanızın bir görüntüsünü eklemek için kullandığınız tam kodu yazabilirsiniz. – Darren
Sorunum, [itemSubview release] oldu. Böylece, bu kaldırıldı, hepsi iyi. – meriial