2011-10-23 19 views
11

Statik menü (IOS 5) oluşturup, storyboard içinde özel hücreler oluşturmaya ve gruplandırılmış tablo görünümüne yüklenmeye çalışılır.Bir Storyboard içinde özel UITableViewCell oluşturma

Ben ViewController sınıf doğru TableViewController ayarlandığında çıkış

@property(nonatomic,strong) IBOutlet UITableViewCell *labelCell; 

oluşturduk ve bu prize özel hücreyi bağladık.

Ayrıca, temsilci ve veri kaynağı kurulumunu da yaptım.

Ben

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return self.labelCell; 
} 

Bu yanlış bir ton olduğuna eminim

var, ama sadece tek bir hücreyi görüntülemek ve oradan gitmeye çalışıyorum. Hikaye panosu aracılığıyla IB içinde özel hücreler yapmakla ilgili herhangi bir örnek yoktur. Ben hala bir xib dosyası oluşturup mainBundle'a yükleyerek eski yolunu kullanabilirim ama sanırım bugüne kadar kalmak istiyorum.

Ancak, bu görünüm denetleyicisini yüklediğimde yukarıda gördüğüm noktalarda bir çökme oluyor. SIGABRT

cevap

13

UITableView'nuzun storyboard'unda 'Static Cells' (Statik Hücreler) kullanmasını ayarladıysanız, UITableViewDataSource yöntemlerinden herhangi birini uygulamanız gerekmez ve hücreyi doğrudan Interface Builder'da değiştirebilirsiniz. Tek bir etiket hücresi için, hücreyi seçin ve türünü 'Temel' olarak değiştirin. Artık hücreyi tıpkı diğer görüntüleme nesnesinde yaptığınız gibi düzenleyebilirsiniz.

+1

Yep: Burada

film şeridindeki etiketleri ayarlamayı unutmayın, öğretici örnek kodudur. Bu konuda.Bunu yapmama neden olan hiçbir rehber bulamadığımdan emin değilim. Daha kolay hale getirir. – Doug

+1

Rastgele bir soru olarak, statik hücreleri kullanmak, IB'de belirttiğiniz hücre miktarına sahip olduğunuzu ima eder? Veri kaynağı yöntemlerini uygulamanız gerekmediğinden, tablo görünümünüzdeki verileri değiştiremeyeceğinizi ve bu yüzden statik olarak adlandırdıklarını düşünmüyorum - doğru mu? – Warkst

+0

@Warkst - tam olarak. Aslında, veri kaynağı yöntemlerinin saplama uygulamalarını kaldırmalısınız. – jrturton

27

Hikaye panosunu kullanırken tablonuz için hücreleri nasıl aldığınız hakkında öğrendiklerim. Bir UITableView'i görünümünüze sürüklediğinizde, bir alt görünüm olarak ayarlanmış bir prototip hücresiyle birlikte gelir. Bu prototip hücresini kullanmak için, öznitelik denetçisinde benzersiz bir yeniden kullanım tanımlayıcısı ayarlayın ve ardından cellForRowAtIndexPath: yönteminizdeki hücreyi deşifre etmek için aynı tanımlayıcıyı kullanın. Dequeue çağrısı nil döndürürse sıfırdan bir hücre oluşturmaya yönelik kodu dışarıda bırakıyorum; Bunun olabileceğini sanmıyorum. Bu yüzden, hücreyi deşarj edin, her zamanki UITableViewCell yöntemleri ile yapılandırın ve geri gönderin.

Ayrıca, UITableViewCell öğesinin özel alt sınıflarını da oluşturabilirsiniz. Sadece storyboard'un sınıf kimlik denetçisinde sınıf adını ayarlayın ve Nesneler paletinden istediğiniz öğeleri hücrenize sürükleyin. Ardından, alt sınıfınızın kod dosyalarında onlar için IBOutlet özellikleri oluşturun ve bunları her zamanki gibi film şeridindeki hücreye bağlayın. Bu kod içinde hepsini yapmaktan çok daha iyi!

Sonunda tablonuzda birden fazla hücre olabilir. UITableViewCell nesnelerini paletten tabloya sürükleyin ve her birine özellik denetçisinde benzersiz bir yeniden tanımlama tanımlayıcısı verin. CellForRowAtIndexPath: yönteminde, her hücrenin türünü seçin ve çok esnek bir tablo görünümüne sahip olabilirsiniz. Öğretici bana yardımcı oldu

+1

Bu doğru, ancak soru prototip kullanmayan statik tablo görünümleriyle ilgilidir. – jrturton

+0

Yeni bir senaryo (şüpheye) sahibiyim. Eğer '+', '-' düğmeleri ve' UITextField' içeren özel bir hücreye sahip bir 'UITableView' varsa. Tüm kurulum zaten paragraf # 2'ye göre yapılır ama şimdi hücrelerimin yeniden kullanılmasını önlemek istiyorsanız bunu yapmak için iyi bir yol var mı? Bunu yapmalı mıyım? (Birden fazla e-posta kimliğinin eklenmesi işlevini istiyorum) – thesummersign

+0

@jrturton Ah, ancak bazılarının "statik" bölümü gerçekleştirmeden bir Google aramasından ulaşması. Başlık biraz yanıltıcıdır. Yani * bu * cevap aslında ben * Ben * arıyordu. –

4

This. İhtiyaç duyduğunuz nesneye etiket üzerinden başvurabilirsiniz. üzerinde storyboard sürükle olarak

bir UIImageView veya UILabel vb başvurmak için etiketini kullanın ardından - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath içinde (istersen) 100'e etiketi ayarlayın.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

// Configure the cell... 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

// Display recipe in the table cell 
Recipe *recipe = [recipes objectAtIndex:indexPath.row]; 
UIImageView *recipeImageView = (UIImageView *)[cell viewWithTag:100]; 
recipeImageView.image = [UIImage imageNamed:recipe.imageFile]; 

UILabel *recipeNameLabel = (UILabel *)[cell viewWithTag:101]; 
recipeNameLabel.text = recipe.name; 

UILabel *recipeDetailLabel = (UILabel *)[cell viewWithTag:102]; 
recipeDetailLabel.text = recipe.detail; 

return cell; 
} 
İlgili konular