2012-03-22 11 views
7

iOS uygulamalarında, UITableView#dequeueReusableCellWithIdentifier'u kullanmadan önce nib dosyalarını tablo görünümümüze kaydetmeliyiz.Yeniden kullanım tanımlayıcısının bir UITableView ile kaydedilmiş olup olmadığını nasıl kontrol edebilirim?

Örnek:

static NSString *myReuseIdentifier = @"MyReuseIdentifier"; 
UINib *cellNib = [UINib nibWithNibName:myReuseIdentifier bundle:nil]; 
[self.tableView registerNib:cellNib forCellReuseIdentifier:myReuseIdentifier]; 

bir Nib zaten bir UITableView kayıtlı olup olmadığını kontrol etmek için bir yolu var mı?

Uygulamamdaki çeşitli denetleyiciler arasında çeşitli tablolarda kullandığım özel bir hücrem var. Bazı kodları makroya taşımak istiyorum. Hücre yeniden kullanıma hazır değilse niyetinde ne bunun ise ancak

-dequeueReusableCellWithIdentifier: 

döner nil

-(CustomCell *)customCell:(UITableView *)tableView 
{ 
    static NSString *reuseIdentifier = @"MyReuseIdentifier"; 
    if (![table hasAlreadyRegisteredNib:reuseIdentifier]){ 
     UINib *cellNib = [UINib nibWithNibName:reuseIdentifier bundle:nil]; 
     [self.tableView registerNib:cellNib forCellReuseIdentifier:reuseIdentifier];  
    } 
    CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 
    return cell; 
} 
+0

Neden nib'nizi viewDidLoad yöntemine kaydetmiyorsunuz? – JiaYow

+0

Çünkü bunu birkaç denetleyicide paylaşılan bir makronun içine yapıştırmak istiyorum – bodacious

+0

Ancak çeşitli tablolarınız olduğundan, her bir tablo için nib kaydetmeniz gerekir. –

cevap

4

gibi bir şey emin değilim. Aksi takdirde, hücreyi döndürür, böylece basitçe deneyebilirsiniz.

+0

Harika bahşiş! Böylece hücrenin sıfır olup olmadığını kontrol edebilirim, eğer öyleyse Nib'i masaya kaydettim ve sonra hücreye geri döndüm! teşekkürler – bodacious

+0

NIB'yi iOS 5'e kaydetmek için nil'e bağlı olunca dikkatli olun. VoiceOver etkinleştirildiğinde bir hata var: Bu durumda her zaman sıfırlanır. Yani sonsuz döngü kayıt döngüsüne gireceksin. Daha fazla bilgi: http://stackoverflow.com/a/13881778/235297 –

0

registerNib:forCellReuseIdentifier: noktasının, boilerplate kodunu azaltmak olduğuna inanıyorum. Bunu bir kez viewDidLoad yönteminizde arayabilir misiniz?

+0

Birden çok kontrolörde aynı kodu tekrar etmekten kaçınmaya çalışıyordum - bunun yerine makro olarak yazdım – bodacious