使用自我调整大小后,reloadData不再起作用

时间:2015-04-23 02:54:40

标签: ios iphone uitableview swift autolayout

我有一个带自定义单元格的UITableView。单元格中有一个Button,一个标签和一个隐藏标签。我希望在单击按钮后可以看到隐藏的标签。但是当我使用自我调整单元格时,在将隐藏标签设置为可见后,我无法重新加载我的tableView。

自调整单元格在viewDidLoad()函数中使用这两行代码正常工作。

self.tableView.estimatedRowHeight = 68.0
self.tableView.rowHeight = UITableViewAutomaticDimension

这是我的ViewController类:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()

    //Self sizing cells
    self.tableView.estimatedRowHeight = 68.0
    self.tableView.rowHeight = UITableViewAutomaticDimension
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

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

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell
    cell.leftLabel.text = "Left Label"
    cell.centerLabel.text = "I am the center label and I need a little more words because I am supposed to be a wrap content. I hope this is enough"
    cell.button.tag = indexPath.row
    cell.button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
    return cell
}

func buttonAction(sender: AnyObject) {
    var button: UIButton = sender as! UIButton
    let indexPath: NSIndexPath = NSIndexPath(forRow: button.tag, inSection: 0)
    var cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell
    cell.centerLabel.hidden = false
    self.tableView.reloadData()
}
}

我打电话

self.tableView.estimatedRowHeight = 68.0

buttonAction函数中的reloadData调用不再起作用。

有人可以帮我解决这个问题吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

在reloadData之后,您的cell.centerLabel.hidden也会失效。 由于您没有更改cellForXXX中的centerLable.hidden,因此centerLable-hidden单元格将位于表格中的任何位置。

答案 1 :(得分:0)

试试这个。您使用cellForRowAtIndexPath来获取tableView中该位置的单元格,而不是dequeueReusableCellWithIdentifier

override func prepareForReuse() {
    self.centerLabel.hidden = true
}

然后,如果要在重复使用单元格时隐藏centerLabel,请在CustomCell类中添加此方法

...
        else:
            print "That number was too big, it must be no larger then " +str(max_length)
            return ask_question(max_length, rowOrCol, guessNumber)
    except(TypeError):
        print "Only numbers are accepted, please try again!"
        return ask_question(max_length, rowOrCol, guessNumber)