Çıkışlar tekrarlanan içerik iOS'a bağlanamıyor


144

Bir uygulama oluşturdum ve @ IBOutlet'in film şeridine bağlanmaya başladım. Bazılarını temel bir stil ile bir UITableViewCell prototip hücre etiketlere bağlıyorum. Storyboard'da bu hatayı alırken bağlandığımda:

TableViewController'dan UILabel'e detailText Çıkışı geçersiz. Çıkışlar tekrarlanan içeriğe bağlanamaz.

Birisi bana yardım edebilir mi? Ben her zaman başarılı bir şekilde yaptığım şekilde ayarladım ama bu sefer bana bu hatayı chucked.


54
Bir prototip hücredeki etiketi UIViewController alt sınıfındaki bir IBOutlet'e bağlayamazsınız - bunu UITableviewCell alt sınıfındaki bir IBOutlet'e bağlamanız gerekir.
Paulw11

Tamam teşekkürler! :) Öyleyse anlıyorum: nedenini açıklayabilir misiniz?
Tomblasta

3
İstediğiniz sayıda hücreniz ve yalnızca tek bir görünüm denetleyiciniz olabileceğinden, IBOutlet görünüm denetleyicilerine hangi hücrenin etiketi bağlanmalıdır?
Paulw11

Peki, neden tek bir görünüm denetleyicisinde hücre metni için cellForRowAtIndexPath'i kullanamıyorsunuz? Teşekkürler!
Tomblasta

3
Görünüm denetleyicisi yüklendiğinde çıkışlar nesnelere (etiketler gibi) bağlı olduğu için - Bu noktada hücre yok, bu nedenle bağlanacak etiket yok ve hücre varsa, hangisini bağlamak
istediniz

Yanıtlar:


168

Bir tablo görünümü hücre alt sınıfı oluşturun ve onu prototip sınıfı olarak ayarlayın. Çıkışları bu sınıfa ekleyin ve bağlayın. Şimdi hücreyi yapılandırdığınızda çıkışlara erişebilirsiniz.


9
@ Bu satış noktalarına erişim hakkında daha fazla bilgi ekleyebilir misiniz?
Juan Boero

1
Juan Pablo - Söylediği, özel bir tablo görünümü hücresi kullanmanın normal olduğu. Hücreyi kullandığınız görünümün içindeki bir kısıtlamanın çıkışını ayarlayamazsınız, bunun yerine bunu cellForRowAtIndexPath'de yapmanız gerekir - customCell.constraint_row_width.constant = 25.0;
Stuart

70

Film şeridi aracılığıyla size sağlanan iki tür tablo görünümü hücresi vardır, bunlar Dinamik Prototipler ve Statik Hücrelerdir

resim açıklamasını buraya girin

1. Dinamik Prototipler

Adından, bu hücre türü dinamik olarak oluşturulur. Film şeridi değil, kodunuz aracılığıyla kontrol edilirler. Tablo görünümü delegesi ve veri kaynağı yardımıyla programlı olarak hücre sayısını, hücre yüksekliğini, hücre prototipini belirleyebilirsiniz.

Bir hücreyi tablo görünümünüze sürüklediğinizde, hücrelerin prototipini bildirirsiniz. Daha sonra bu prototip üzerinde herhangi bir miktarda hücre oluşturabilir ve bunları yöntemsel olarak tablo görünümüne cellForRowprogramlı olarak ekleyebilirsiniz . Bunun avantajı, kendiniz tarafından eklenen tüm görünümlerle her bir hücreyi oluşturmak yerine yalnızca 1 prototip tanımlamanızdır (Bkz. Statik hücre).

Bu durumda, hücre prototipindeki UI öğelerini görünüm denetleyicinize bağlayamazsınız. Başlatılan yalnızca bir görünüm denetleyicisi nesnesine sahip olacaksınız, ancak başlatılan ve tablo görünümünüze eklenen birçok hücre nesnesi olabilir. Bir görünüm denetleyicisi bağlantısıyla birden çok hücreyi denetleyemediğiniz için hücre prototipini görüntüleme denetleyicisine bağlamak mantıklı değildir. Ve bunu yaparsanız bir hata alırsınız.

resim açıklamasını buraya girin

Bu sorunu gidermek için prototip etiketinizi bir UITableViewCellnesneye bağlamanız gerekir . A UITableViewCellaynı zamanda bir hücre prototipidir ve istediğiniz kadar hücre nesnesi başlatabilirsiniz, her biri daha sonra film şeridi tablosu hücre prototipinizden oluşturulan bir görünüme bağlanır.

resim açıklamasını buraya girin

Son olarak, cellForRowyönteminizde UITableViewCellsınıftan özel hücre oluşturun ve etiketle eğlenceli şeyler yapın

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellIdentifier") as! YourCell

    cell.label.text = "it works!"

    return cell
}

2. Statik Hücreler

Öte yandan, statik hücreler aslında storyboard üzerinden yapılandırılır. Kullanıcı arabirimi öğelerini oluşturmak için her hücreye sürüklemelisiniz. Film şeridinden hücre sayılarını, yükseklikleri vb.Kontrol edeceksiniz. Bu durumda, film şeridinden oluşturduğunuz şeyle karşılaştırıldığında, telefonunuzdan tamamen aynı olan bir tablo görünümü görürsünüz. Statik hücreler, hücrelerin çok fazla değişmediği sayfayı ayarlamak için daha sık kullanılır.

Statik bir hücre için kullanıcı arabirimi öğelerini denetlemek için, bunları doğrudan görünüm denetleyicinize bağlamanız ve kurmanız gerekir.

resim açıklamasını buraya girin


@FangmingNing kodumda hala metin etiketini değiştiremiyorum, tanımlayıcı ile doğru hücre olarak adlandırılan hücreye sınıf bağladım, ancak hala değişmiyor
jorge saraiva 20:17


Ben eksikti ! Hücreniz . +100
Daniel Springer

6 ay boyunca sadece kodda bir proje üzerinde çalıştıktan sonra biraz tazeleme yapmak her zaman iyidir.
ttorbik

Teşekkürler, benim sorunum hücre yerine ViewController bağlanmak olmasıdır.
Stella

23

Eğer ekran Ayarları ve diğer seçeneklere bir tablo görünümü (built-in Ayarlar uygulamalar gibi) kullanıyorsanız, o zaman ayarlayabilirsiniz Tablo Görünümü İçeriğini için Statik Hücreler altında Müfettiş Özellikleri . Ayrıca, bunu yapmak için Tablo Görünümünüzü bir UITableViewController örneğine katmanız gerekir.


Bu arada daha basit ve daha hızlı ve kabul edilen cevap imho olmalı
Jaime Agudo

5

Veya görünümdeki nesneye başvurmak için IBOutlet'i kullanmanız gerekmez . TableViewCell'de bir Etiket değeri verebilirsiniz, örneğin Etiketi 123 olarak ayarlayın (bu özellik denetçisi tarafından yapılabilir). Ardından etikete şu şekilde erişebilirsiniz:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "someID", for: indexPath)

    let label = cell.viewWithTag(123) as! UILabel //refer the label by Tag

    switch indexPath.row {
    case 0:
        label.text = "Hello World!"
    default:
        label.text = "Default"
    }
    return cell 
}

çok kolay ve basit! +100
Julian Silvestri

1

Benimle bir var UIViewcontrollerve içine üzerinde özel bir hücre ile bir tablo görünümü var. İçine UILabel benim çıkışını haritasına UItableviewcelliçin UIViewControllerdaha sonra hata var.


Bu özel sınıfınızda özel hücre sınıfı yapın ve iboutlet'i başlatın
Shauket Sheikh

0

Çoğu insanın alt sınıflamanın UITableViewCell bu sorunu çözdüğüne işaret ettiği gibi . Ancak buna izin verilmemesinin nedeni, prototip hücresi ( UITableViewCell ) Apple tarafından tanımlandığı ve buna kendi çıkışlarınızı ekleyemediğiniz için.


0

Bazen Xcode, doğru hücre çıkış bağlantısı üzerinde kontrol edemedi.

Her nasılsa benim mevcut hücrenin etiket / düğme başka bir hücre bağladı Ben sadece bunları kaldırmak ve hata gider.


-1

Simülatöre tıklayın, Pencereye gidin ve Cihaz Çerçevelerini etkinleştirin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.