2015-04-29 10 views
5

Swift'de, Masa Görünümlerine bağlı olarak bir uygulama yapıyorum. Satır silme işleminin yanı sıra hem üstbilgileri hem de altbilgileri kullanır. Bir satır silme işlemi gerçekleştirdiğimde bazı garip nedenlerden dolayı, üstbilgi ve altbilgi silinecek satırın kayan hareketini izler. Aşağıdaki ekran görüntüleri demek istediğimi açıklıyor.Silmek için üstbilgiler ve altbilgiler neden satır hareketini takip ediyor?

enter image description here

Bunu nasıl engelleyebilirim?

böyle silme işlevi uygulayan ediyorum:

// Deleting 
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 

     // Handling data source updating, cell row deletion, transition... 

    } 
} 

Ve üstbilgi ve altbilgi böyle:

// ## Header ## 
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let headerCell = tableView.dequeueReusableCellWithIdentifier("shoppingHeader") as! ShoppingTableViewHeaderCell 

    // Clear up startup background 
    headerCell.textLabel?.backgroundColor = UIColor.clearColor() 

    // Add covering background color 
    headerCell.backgroundColor = UIColorFromHex(0x22b8a3, alpha: 1) 

    // Set store image, or store title if image is unavailable 
    let url = NSURL(string: dataSource[sortedStores[section]]["meta_data"]["logo"].string!) 
    let data = NSData(contentsOfURL: url!) 
    if data != nil { // Store image 
     let image = UIImage(data: data!) 
     headerCell.imageView?.image = imageResize(image: image!, cellWidth: 90, cellHeight: 30) 
    } else { // Store name label 
     headerCell.textLabel?.text = dataSource[sortedStores[section]]["meta_data"]["nameStore"].string 
     headerCell.textLabel?.font = UIFont(name: "HelveticaNeue-Light", size: 16) 
     headerCell.textLabel?.textColor = UIColor.whiteColor() 
    } 

    // Right hand side details: define strings 
    let address = dataSource[sortedStores[section]]["meta_data"]["street"].string 
    let distanceMeasure = dataSource[sortedStores[section]]["meta_data"]["distance"].int! 
    let numberOfOffers = dataSource[sortedStores[section]]["offers"].count 

    // Right hand side details: assign strings to variables 
    headerCell.rightLabel0.text = address 
    headerCell.rightLabel1.text = "\(distanceMeasure) m away" 
    if numberOfOffers == 1 { 
     headerCell.rightLabel2.text = "1 offer available" 
    } else { 
     headerCell.rightLabel2.text = "\(numberOfOffers) offers available" 
    } 

    // Right hand side details: set text color 
    headerCell.rightLabel0.textColor = UIColor.whiteColor() 
    headerCell.rightLabel1.textColor = UIColor.whiteColor() 
    headerCell.rightLabel2.textColor = UIColor.whiteColor() 

    return headerCell 
} 


// ## Footer ## 
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { 
    let footerCell = tableView.dequeueReusableCellWithIdentifier("shoppingFooter") as! UITableViewCell 

    // Set black color to show that footer moves too. 
    footerCell.backgroundColor = UIColor.blackColor() //clearColor() 

    return footerCell 
} 
+0

Üstbilgilerinizi altbilgileri nasıl yaratıyorsunuz? –

+0

@VladimirKravchenko Kodu protokole göre ekliyorum. Sanırım ... Bu kodu eklemek için soruyu güncelledim. –

cevap

4

ben düşünüyorum Üstbilgi ve altbilgiler için yeniden kullanılabilir hücrelerini kullanarak bir sorundur. Bunun yerine hazretleri kullanmayı deneyin. Üstbilgi ve altbilgi hücreleri için ayrı bir .xib dosyası oluşturun. Ve ile hücreyi almak:

let headerCell = NSBundle.mainBundle().loadNibNamed("YourNibName", owner: self, options: nil).first as! ShoppingTableViewHeaderCell 

Veya UITableViewHeaderFooterView en alt sınıfını uygulamak, bunun için bir kalem ucu oluşturmak, bu ucunu kayıt:

tableView .registerNib(UINib(nibName:"YourNibName", bundle: nil), forHeaderFooterViewReuseIdentifier: "TableHeader") 

Ve ile Üstbilginizin görünüm elde:

let header = tableView.dequeueReusableHeaderFooterViewWithIdentifier("TableHeader") 
+0

Bu bir problem olmamalı. – Sulthan

+0

Bu bağlamda benim dosyam nedir? Ben daha önce hiç kullanmamıştım, bildiğim tek şey, arayüzümün grafikleriyle ilgili önemli bir şey. –

+1

Kuyrukların kullanılması gerekmez, ancak en azından “dequeueReusableCellWithIdentifier” yerine “dequeueReusableHeaderFooterViewWithIdentifier” tercih edilir. – Sulthan

6

headerCell yerine headerCell.contentView döndürün ve sorununuz çözülecektir.

+0

Bu işe yarıyor! Teşekkürler –

+0

Güzel !!! Teşekkürler. – realmasse

+0

ama tıklama olayı bu hile kullanırken çalışmıyor Bu –

İlgili konular