我正在Swift中创建一个待办事项应用程序,我正在尝试使用 UITableView 来显示任务。用户添加任务,然后按"完成"。 UITableView 会重新显示在前面,应用程序崩溃。这是我的代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: nil) //crashes on this line
cell.textLabel!.text = taskMgr.tasksArray[indexPath.row].name
cell.detailTextLabel!.text = taskMgr.tasksArray[indexPath.row].desc
return cell
}
有趣的是,这行在我很快创建的另一个非常相似的应用程序中运行良好。有谁能请我指出正确的方向?如果有必要,我很乐意添加更多细节。
答案 0 :(得分:1)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:CustomCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell
cell.lblText.text = "Testing"
return cell
}
答案 1 :(得分:0)
您应该重构代码以利用UITableView的性能。您的单元格可以重复使用,而不是每次在屏幕上显示时重新创建。
为此,您应该删除UITableViewCell的init方法调用。而是将其替换为: dequeueReusableCellWithIdentifier:forIndexPath:
iOS 6中的新功能,模式是使用带有重用标识符的tableview注册TableViewCell子类。然后,您可以使用dequeReusableCellWithIdentifier轻松获取可重用的单元格:forindexPath:
在viewDidLoad
或调用tableview数据源/委托方法之前的某个地方,您应该调用注册您的单元子类。
registerClass:forCellReuseIdentifier:
对于你,在Swift中,你会想要打电话:
tableview.registerClass(UITableViewCell.self, identifier:"MyReuseIdentifier")
// note there is also a method to register nibs
然后在cellForRowAtIndexPath方法中:
tableView.dequeReusableCellWithIdentifier("MyReuseIdentifier", forIndexPath: indexPath)
答案 2 :(得分:0)
使用重用标识符
my_engine_engine.articles_path
使用明细标题
mount MyEngine::Engine => '/app', :as => 'my_engine'