改变UITableViewCell高度内部修饰

时间:2015-08-26 23:13:25

标签: swift uitableview cell segue uigesturerecognizer

正如标题所说,我想让我的细胞动态改变高度。我试着尽可能清楚。当我在一个单元格(原型单元格)内部触摸时,单元格改变高度(从44到88);在单元格中有一个部分隐藏的UIImage(88px高度),隐藏的单元格中有视图,触摸开始segue到第二个tableView;当我在另一个单元格内触摸时,前一个单元格返回到44px高度,另一个单元格改变高度,如前一个单元格。遵循我需要做的计划。

enter image description here

我认为这很难,所以如果有人能帮我做这个功能,我将非常感激!或者如果你知道任何想法的例子(例如gitHub)请报告我! 非常感谢: - )

1 个答案:

答案 0 :(得分:0)

不是那么糟糕。我这样做了,可能有更聪明的方法来做到这一点。 重要的是tableView.beginUpdate和.... endUpdate。

  //
    //  DynamicTableViewController.swift
    //  DynamicCellTest
    //
    //  Created by Lars Christoffersen on 27/08/15.
    //  Copyright (c) 2015 Lars Christoffersen. All rights reserved.
    //

    import UIKit

    class DynamicTableViewController: UITableViewController {

        var dataCource = ["A","B","C","D","E","F","G","H"]
        var extraHeight:CGFloat?
        var selectedRowIndex:Int?

        override func viewDidLoad() {
            super.viewDidLoad()
        }

        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }

        override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {


            if extraHeight != nil && selectedRowIndex != nil && selectedRowIndex == indexPath.row{
                return 41 + extraHeight!
            }else{
                return 41
            }
        }


        override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            self.tableView.beginUpdates()
            selectedRowIndex = indexPath.row
            extraHeight = 100
            self.tableView.endUpdates()

        }

        override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
            self.tableView.beginUpdates()
            selectedRowIndex = indexPath.row
            extraHeight = 0
            self.tableView.endUpdates()
        }

        override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 1
        }

        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return dataCource.count
        }


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

            cell.textLabel?.text = dataCource[indexPath.row]
            return cell
        }
    }