2014-07-23 8 views
8

Tıklandığında masaüstümün tek bir satırını yeniden boyutlandırmam gerekiyor. Bunu nasıl yapabilirim? Bana yardım eden var mı?Tıklandığında tek bir hücrenin yüksekliğini nasıl değiştirebilirim?

Bence denetleyicisi sınıfı:

class DayViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    @IBOutlet var daysWorkPointTable: UITableView 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     var nipName = UINib(nibName: "daysWorkPointsCell", bundle: nil) 

     self.daysWorkPointTable.registerNib(nipName, forCellReuseIdentifier: "daysWorkCell") 
    } 

    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 

    func tableView(tableView:UITableView!, heightForRowAtIndexPath indexPath:NSIndexPath) -> CGFloat { 
     return 75 
    } 

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { 
     var cell = tableView.dequeueReusableCellWithIdentifier("daysWorkCell", forIndexPath: indexPath) as daysWorkPointsCell 

     return cell 
    } 

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 

    } 
} 

cevap

31

Önce bir özelliğinde seçili hücrenin indexPath takip etmek zorunda: Eğer olabileceğinden, bu isteğe bağlı olmalıdır

var selectedCellIndexPath: NSIndexPath? 

hücre seçilmedi. Kontrol etmek zorunda Şimdi

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if selectedCellIndexPath == indexPath { 
     return selectedCellHeight 
    } 
    return unselectedCellHeight 
} 

sizin tableView(_:, didSelectRowAtIndexPath:) yönteminde: Eğer tableView(_:, heightForRowAtIndexPath:) uygulamak zorunda Şimdi

let selectedCellHeight: CGFloat = 88.0 
let unselectedCellHeight: CGFloat = 44.0 

: Sonraki seçilmiş ve seçilmemiş devlet için yüksekliklerini beyan (İstediğini için değerleri değiştirmek) olanak tanır seçilen satır ya da seçilmemiş bir satır Hava aday edilmiştir:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if selectedCellIndexPath != nil && selectedCellIndexPath == indexPath { 
     selectedCellIndexPath = nil 
    } else { 
     selectedCellIndexPath = indexPath 
    } 

    tableView.beginUpdates() 
    tableView.endUpdates() 

    if selectedCellIndexPath != nil { 
     // This ensures, that the cell is fully visible once expanded 
     tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .None, animated: true) 
    } 
} 

beginUpdates() ve 012.çağrıları size hareketli bir yükseklik değişimi sunuyor.

Eğer bir animasyon bloğunda UIView.animationWithDuration(...) içinde beginUpdates() ve endUpdates() çağrıları sarın ve istediğiniz her türlü değer olarak ayarlayabilirsiniz yükseklik değişimi animasyon süresini değiştirmek istiyorsanız.

Bu kodu eylemde gösteren this sample project kontrol edebilirsiniz.

+0

Argh, sadece bunun tek bir hücrede çalışmasını istediğinizi okuyun. Uygulamam biraz fazla overkill, çünkü herhangi bir sayıda hücre için çalışıyor. –

+0

Onaylanıp bildirilmediyse onaylamada selectedCellIndexPath nedenine bir değer atamıyorum, bu nedenle var olanı değiştirmeyi denedim, ancak hatayla devam ediyorum çünkü bir NSIndexPath öğesine sıfır atayamıyorum. Bana yardımcı olabilir misiniz? Neyi yanlış yapıyorum? –

+0

Atamaları, self.selectedCellIndexPath'a açıkça atamak için değiştirdim. Şimdi çalışmalı, umarım;). –