2016-03-24 19 views
0

Neredeyse bir hafta boyunca, dinamik olarak oluşturulmuş bir tablo görünümüne nasıl statik/özel bir tableviewcell ekleyebileceğimi anlamaya çalışıyorum. Veritabanından aldığım verilere dayanarak hücreleri dolduruyorum. Bildiğiniz ve görebilirsiniz gibi enter image description hereDinamik olarak oluşturulmuş bir tablo görünümüne özel bir hücre nasıl eklenir?

, size ClassDojo uygulamasıyla istediğiniz kadar gruplar eklemek ekleyebilirsiniz, ancak son hücreye: Temelde ne ben başarmak için çalışıyorum uygulama ClassDojo aşağıdaki resim gibi olduğu Bu durumda Voeg een nieuwe klas toe, her zaman tablonun alt kısmında kalacak. Tam olarak yapmaya çalıştığım şey bu.

Bu ana kadar yapmaya çalıştığım şey, tablodaki en son hücreyi hesaplamaya çalışmak ve özel hücremi eklemeye çalışmak, ancak maalesef kafamı bulamadım.

Birisi bana bu konuda yardımcı olabilir eğer gerçekten çok memnun olurum.

Şimdiden teşekkürler.

Lütfen herhangi bir kod gerekip gerekmediğini bana bildirin.

--------- KURGU POST ---------

Ben @Slayter adetim hücre sayesinde atamak başarmak, ama şimdi karşı karşıya ediyorum özel hücrem hemen dinamik olarak oluşturulan hücrelerimin (Alamofire ile) üzerine yazdığı sorun.

Herhangi bir yardım için teşekkür ederiz.

cevap

1

SınıfDojo iOS Engineer burada! Bunu nasıl yaptığımızı paylaştığımıza memnun oldum.Slayter gibi

biz

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return myData.count + 1 // Add one for your custom cell 
} 

yapmak Fakat ek olarak biz de aşağıdakileri yapın sözü:

class CustomCell: UITableViewCell { 
    static let reuseIdentifier = "CustomCell" 

    // More code 
} 
: CustomCell böyle bir şey (tam değil) görünüyor

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    var cell = nil; 

    if self.indexIsForCustomCell(indexPath) { 
     cell = tableView.dequeueReusableCellWithIdentifier(CustomCell.reuseIdentifier) 
     // Additional configuration 
    } else { 
     cell = tableView.dequeueReusableCellWithIdentifier(RegularCell.reuseIdentifier) 
     // Additional configuration 
    } 

    return cell 
} 

Ve normal hücre gibi görünüyor:

Dinamik hücreler üzerine yazılıyor
class RegularCell: UITableViewCell { 
    static let reuseIdentifier = "RegularCell" 

    // More code 
} 

sebebi ne olursa olsun bu özel hücre veya normal hücreler olup olmadığı, aynı cellIdentifier kullandığınız hat

let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell 

Bildirimi taşımaktadır.

self.tableView.registerClass(RegularCell.class, forIdentifier: "new group") 
self.tableView.registerClass(CustomCell.class, forIdentifier: "new group") 

yapmanız gerektiğinden zaman:

self.tableView.registerClass(RegularCell.class, forIdentifier: RegularCell.reuseIdentifier) 
self.tableView.registerClass(CustomCell.class, forIdentifier: CustomCell.reuseIdentifier) 

VEYA

self.tableView.registerClass(RegularCell.class, forIdentifier: "regularCellReuseIdentifier") 
self.tableView.registerClass(CustomCell.class, forIdentifier: "customCellReuseIdentifier") 

aynı tanımlayıcı anahtarı kullanarak, anlatıyorsun Bu büyük olasılıkla aşağıdakileri yaparak demektir Her iki hücreyi aynı tip olarak tedavi etmek için UITableView. Bu yüzden ekranda çizilen yeni bir hücrenin belleğini geri alması gerektiğinde, RegularCell ve CustomCell'u birbirinin yerine kullanacaktır.

Bu, yardımcı oldu ve bizim App göz atın teşekkürler!

================= DÜZENLEME =================

Ben unuttuğunu Gerçekleşen indexIsForCustomCell yöntemini ekleyin. İşte burada:

func indexIsForCustomCell(indexPath : NSIndexPath) -> Bool { 

    if self.myData.count > 0 { 
     return indexPath.section == 0 && indexPath.row == (self.myData.count+1) 
    } 

    return indexPath.section == 0 && indexPath.row == 0 
} 
+0

Efendim, sorumu durdurarak çok teşekkür ederim. Şansımı aldığım zaman ASAP çözümünü deneyeceğim, çünkü şimdi okuldayım. Şimdi sonuca izin vereceğim. Bu arada; Uygulamam için başka bir çözüm buldum.Yani, UITableViewCell olarak özel bir nib dosyası oluşturdum. Benden nib dosyasını kaydettim ve bölüm için altbilgi olarak kullandım. Bu yaklaşım hakkında fikrinizi bilebilir miyim? Çünkü eğer verimli değilse, onu 'cellForRowAtIndex' işlevi içine ekleyerek ana yaklaşımıma geri döndüreceğim. Bir kez daha, zamanınız ve desteğiniz için çok teşekkür ederim. Gerçekten minnettarım. –

+0

@OsmanSafaKaya yaklaşımınız işe yarayacaktır, ancak UITableViewCell size gerçekten bir 'tableFooterView' içinde gerek duymadığınız bir dizi ek kod verir. Örneğin, UITableViewCell, 'UIView' tabanına ek olarak bir 'contentView' içindeki her şeyi içerir. Bu büyük bir anlaşma değil, ancak yüklü ve kullanılan ek bir veri kümesi. Bunun yerine bir UIView kullanabilirsin. – Endama

+0

Tavsiyeniz için teşekkürler. Çözümünüzü projem için uygulamaya çalışırken, 'hücre'yi nil' olarak atamaya çalıştığımda bir hata alıyorum. Hatayı [buradan] görebilirsiniz (https://i.imgsafe.org/7b54b0b.png). Bunun neden olabileceğini biliyor musunuz? –

1

Oldukça basit. Veri kaynağınızda bulunandan bir tane daha hücre beklemek için tableView'e söylemeniz yeterlidir.

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return myData.count + 1 // Add one for your custom cell 
} 

Sonra cellForRowAtIndexPath yönteminde sadece o indexPath

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell 

    if indexPath.row < myData.count { 
     // configure cell as normal 
    } else { 
     // Add your custom cell logic here 
    } 

    return cell 
} 
için bazı özel mantık eklemek gerekir:

Örnek sizin numberOfRowsInSection yöntemde

, böyle bir şey olacak

+0

Çok teşekkür ederim, çok yardımcı oldu. Şimdi hücre değişkeni özel hücremde şu gibi bir ifadede yeniden atamaya çalışıyorum: cell = tableView.dequeueReusableCellWithIdentifier ("newgroup") olarak! newGroupCell 'ancak aşağıdaki hatayı verir: **' mainGroupCell 'yazmak için' newGroupCell 'yazın değeri yeniden atanamaz. ** (mainGroupCell dinamik hücreler için kullanıyorum hücredir). Bununla nasıl baş edebilirim biliyor musun? –

+0

Özel hücrenizin sınıfını görünüm denetleyicinize kaydetmeniz gerektiğine inanıyorum. Şu anda mobil cihazınızda "viewDidLoad" yönteminde şu gibi bir şey eklemeniz gerekir: self.tableView.registerClass (newGroupCell.class, forIdentifier: "new group") veya benzeri bir şey. – Slayter

+0

Teşekkürler! Bunu deneyeceğim ve başka bir çözüm bulursam daha sonra tekrar geleceğim. –

İlgili konular