2016-04-03 27 views
1

Ayrıntısı etiketi UITableview ile bölümler ve farklı satır türleri (shown here) içeren bir ekran oluşturmaya çalışıyorum. Sorun, Sıklık hücresindeki Ayrıntı etiketinin değerini değiştirmeye çalışırken, bunun yalnızca bir özellik olduğunu söylüyor. Frekans hücresi, storyboard'da "Right Detail" yazacak şekilde ayarlanmıştır.Ayarlanamaz UITableViewCell

Benim kodudur:

Ayrıca
let frequencyCellID = "frequencyCell" 
    let decksCellID = "decksCell" 
    let pickerCellID = "pickerCell" 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:UITableViewCell? 

    switch (indexPath.section,indexPath.row){ 
    case (0,0): cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID) 
     //line below shows error 
     cell?.detailTextLabel? = "test" 
    case (0,1): cell = tableView.dequeueReusableCellWithIdentifier(pickerCellID) 
    case (1,0): cell = tableView.dequeueReusableCellWithIdentifier(decksCellID) 
     cell?.detailTextLabel? = "test" 
    default: break 
    } 
    return cell! 

, nasıl son satırında hücreyi unwrapping kuvvetini önleyebilirsiniz? Boş bir TableViewCell başlatmaya çalıştı ama boş başlatıcı yok gibi görünüyor. Her şeyden

cevap

0

Öncelikle, böyle bir tablo görünümünden bir hücreyi temin edilmelidir: Orada ek indexPath parametre var ve bu yöntem garantileri isteğe bağlı olmayan bir UITableViewCell örneğini döndürmek için

let cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID, forIndexPath: indexPath) 

. Bu aynı zamanda hücre örneğinizi isteğe bağlı hale getirecektir, dolayısıyla onu açmak zorunda kalmayacaksınız. Bu iki yöntemin farklılıklarını okumalısınız, bunun hakkında birçok bilgi var.

Sahip olduğunuz başka bir sorun: detailTextLabel bir UILabel örneğidir, dolayısıyla içeriğini text özelliği aracılığıyla ayarlamanız gerekir. Şunun gibi: bir hata doğrultusunda

cell.detailTextLabel?.text = "test" 
+0

Pekala, hata yazı metninde sorunumu görüyorum. Ama anahtarın içindeki indexpath argümanını yerleştirmeyi ne önerirsiniz? –

+0

, "tableView (tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)' da bir argüman olarak aldığınız indexPath dosyasını geçirmeniz yeterlidir. İlk geçiş durumunuzdaki satırı şu şekilde değiştirebilirsiniz: 'cell = tableView.dequeueReusableCellWithReuseIdentifier (frequencyCellID, forIndexPath: indexPath)' ve derlenecek ve çalışacaktır. – xinatanil

+0

Tamam, teşekkürler :) Biz bu konudayken, ayrıntı etiketini (kendi sınıfına sahip olan) seçici görünümüne göre güncellemek istiyorum. "UITableView" veya "PickerView: didSelectRow" öğesinde değiştirilen "UIPickerView" öğesinde bir global değişken oluşturmalı mıyım? –

0

, sen UILabel? ve bir String örneğidir olan bir Stringcell?.detailTextLabel? için atıyorsunuz. Etiketin metnine bir String atamak için cell?.detailTextLabel?.text = "test"'u yapın.

Ayrıca, detailTextLabel? özelliği readonly olup, maalesef size kendi UILabel? örneğini atayamazsınız. Bununla birlikte, ne yapabiliyorsan, onu isteğinize göre uyarlamak için ihtiyacınız olan özellikleri belirler. Hücreyi unwrapping gelince

vb cell?.detailTextLabel?.backgroundColor = veya cell?.detailTextLabel?.font =, yapabileceği Yani, isteğe bağlı dönmez

let cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID, forIndexPath:indexPath) 

Bu yöntem ile hücre almalısınız.

+0

Ne yazık ki 'cellForRowAtIndexPath' isteğe bağlı döndürmez. –

+0

'cellForRowAtIndexPath' isteğe bağlı döndürmez ve geri dönen bir derleme zamanı hatası olarak bildirilir. – xinatanil

+0

İyi nokta. Cevabı düzenledim. – Hash88