使用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
}
}
答案 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;
}