SORU
1 Kasım 2012, PERŞEMBE


Kullanarak 6 UİTableView dequeueReusableCellWithİdentifier iOS ne zaman UİTableViewCell stil ayarı:forİndexPath:

UITableView iOS 6'da yeni yöntemleri kullanarak UITableViewCellStyle ayarlamak için nasıl çalışmak için çalışıyorum.

Daha önce, zaman yaratma UITableViewCell değiştirir UITableViewCellStyle numaralama oluşturmak için farklı varsayılan hücre çağırırken initWithStyle: ama ne yapabilirim toplamak, bu artık durum.

UITableView Dokümantasyon Apple Devletleri:

Değeri Döndürür: Bir UİTableViewCell ilgili yeniden tanımlayıcısı nesne. Bu yöntem her zaman geçerli bir hücre verir.

Tartışma: Performansı artırmak, görünümü veri kaynağı genellikle tableView satır hücreleri atarken UİTableViewCell nesneleri yeniden bir tablo için:cellForRowAtİndexPath: yöntem. Bir tablo görünümü veri kaynağı yeniden kullanım için işaretlenmiş olan bir UİTableViewCell nesnelerin sıra ya bir listesini tutar. Tablo için yeni bir hücre görünümü sağlamak için sorulduğunda veri kaynağından bu yöntem nesne arayın. Bu yöntem, eğer varsa varolan bir hücre dequeues ya da yeni bir tane daha önceden kayıtlı bir sınıf veya uç dosyası oluşturur.

ÖnemliBir sınıf kaydetmek veya dosya registerNib kullanarak uç gerekir:forCellReuseİdentifier:: forCellReuseİdentifier registerClass: önce bu yöntem arıyorum. yöntem

Belirtilen tanımlayıcı bir sınıf ve yeni bir hücre eğer bir kayıt oluşturulmalıdır, bu yöntemi kendi initWithStyle arayarak cep başlatır:reuseİdentifier: yöntem. Uç tabanlı hücreleri için, bu yöntem sağlanan uç dosyasından hücre nesnesi yükler. Eğer varolan bir hücre yeniden kullanım için kullanılabilir, Bu yöntem, hücrenin prepareForReuse yöntemi yerine çağırır.

Bu cellForRowAtIndexPath benim yeni yeni yöntemler kullanıldıktan sonra nasıl göründüğü

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"cell_identifier";

    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    return cell;
}

Şimdiye kadar sahip olduğum kod sorunsuz çalışıyor ama her zaman varsayılan stil verir. NasılUITableViewCellStyleDefault, UITableViewCellStyleValue1, UITableViewCellStyleValue2 ve UITableViewCellStyleSubtitle gibi diğer stilleri ile hücreleri oluşturmak, böylece bu değiştirebilir miyim?

UITableViewCell, ben sadece iOS 6 önce yapabileceğim varsayılan türünü değiştirmek istiyorum alt etmek istemiyorum. Apple ama en az belgeleri ile bunların uygulanmasını desteklemek için geliştirilmiş yöntemler sağlayacak tuhaf görünüyor.

Herkes bu hakim ya da benzer bir sorun için bir çalışma var mı? Makul herhangi bir bilgi bulmak için mücadele ediyorum.

CEVAP
2 Kasım 2012, Cuma


Bir alt sınıf oluşturmak için istemediğini söylediğini biliyorum, ama kaçınılmaz görünüyor. İOS test sırasında montaj koduna göre 6.0 simülatörü UITableView yaparak UITableViewCell yeni örneklerini (ya da alt) oluşturur

[[<RegisteredClass> alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:<ReuseIdentifier>]

Diğer bir deyişle, stil gönderdi (UITableViewCellStyleDefault) kodlanmış görünüyor. Bunu çözmek için, varsayılan başlatıcı initWithStyle:reuseIdentifier: geçersiz kılar ve kullanmak istediğiniz stili geçen bir alt sınıf oluşturmak için ihtiyacınız olacak:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    // ignore the style argument, use our own to override
    self = [super initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier];
    if (self) {
        // If you need any further customization
    }
    return self;
}

Ayrıca, daha iyi bir hücre istenen her seferinde yapmak yerine viewDidLoad registerClass:forCellReuseIdentifier: göndermek için olabilir:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.tableView registerClass:<RegisteredClass> forCellReuseIdentifier:<ReuseIdentifier>];
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Film Riot

    Film Riot

    16 NİSAN 2006
  • LiteralMSPaint

    LiteralMSPai

    27 EKİM 2010
  • spectragirlz16's channel

    spectragirlz

    22 Ocak 2012