使用dequeueReusableCellWithIdentifier时无法显示detailTextLabel

时间:2016-05-03 08:33:34

标签: ios swift uitableview

使用dequeueReusableCellWithIdentifier时,我无法在detailTextLabel中获得UITableViewCell

如果我每次在UITableViewCell分配一个新的cellForRowAtIndexPath,就会显示detailTextLabel,但显然我会以这种方式泄露内存。

为什么会发生这种情况,如何设法显示带有可重复使用单元格的detailTextLabel

更新:我不使用Storyboard,它是一个基本的系统单元。我现在意识到dequeue...永远不会返回nil,所以在哪里我应该将单元格配置为样式.Subtitle

class SomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        let bounds = UIScreen.mainScreen().bounds
        tableView = UITableView(frame: bounds, style: .Plain)
        tableView.delegate   = self
        tableView.dataSource = self
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: reuseIdentifier)
        self.view.addSubview(self.tableView)
    }

    // uses dequeue
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath);
        if cell == nil {
            cell = UITableViewCell(style: .Subtitle, reuseIdentifier: reuseIdentifier)
        }
        cell.textLabel?.text = "Text"
        cell.detailTextLabel?.text = "Detail NOT displayed"
        return cell
    }

    // doesn't use dequeue...
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .Subtitle, reuseIdentifier: reuseIdentifier) // memory leak
        cell.textLabel?.text = "Text"
        cell.detailTextLabel?.text = "Detail displayed"
        return cell        
    }


}

2 个答案:

答案 0 :(得分:3)

我找到了解决方案。我删除了registerClass行,并在没有dequeueReusableCellWithIdentifier参数的情况下更改为forIndexPath函数。立即工作!

答案 1 :(得分:0)

你必须这样做“dequeueReusableCellWithIdentifier”。

add_filter( 'comment_form_defaults', 'custom_defaults' );

function custom_defaults($defaults) {
    $comment_field_hide = '';

    $defaults[ 'label_submit' ] = 'fooBar';
    return $defaults;

}