我有两种类型的单元格的UITableView。第一种类型显示现有数据,第二种类型用于向表中添加新项目。所以我创建了一个子类" AddListTableViewCell"并放入" @IBOutlet weak var addListTextBox:UITextField!"财产阅读它的内容。 这个"添加列表"单元格在第一行中绘制,没有运行时错误。它被推动:
@IBAction func AddListButtonPressed(sender: UIBarButtonItem) {
if !isAddingList {
isAddingList = true
ListsTableView.reloadData()
let path = NSIndexPath(forRow: 0, inSection: 0)
let cell = tableView.cellForRowAtIndexPath(path) as? AddListTableViewCell
cell.addListTextBox.becomeFirstResponder()
}
}
}
在ListsTableView.reloadData()方法" tableView(_:cellForRowAtIndexPath:"创建了额外的单元格。再次:没有错误。
然后我改变了它的顺序,希望它能够在表的末尾显示,并添加更多的演示项目以观察它的交互(forList中的AddListButtonPressed也发生了变化:)。
现在,当我运行应用程序并按下AddListButton时,会触发func AddListButtonPressed,我得到了#34;致命错误:在解开一个Optional值时意外发现nil"用"让cell = tableView.cellForRowAtIndexPath(path)为? AddListTableViewCell"
此外,如果在应用程序启动后滚动了视图,则没有错误,但warnig" [UIWindow endDisablingInterfaceAutorotationAnimated:]调用>没有匹配-beginDisablingInterfaceAutorotation。忽略&#34。在控制台中。
我在这个网站上找到了一个解决故障线路的解决方案 让cell = tableView.cellForRowAtIndexPath(path)为? AddListTableViewCell 同 让cell = tableView.dequeueReusableCellWithIdentifier(" AddList",forIndexPath:path)为! AddListTableViewCell 它运作良好,但我仍然会发出警告。
但是为什么我应该再创建一个单元格,当它已经设置为" tableView(_:cellForRowAtIndexPath:"方法" ListsTableView.reloadData()&#34 ;是否有可能以某种方式保持"让cell = tableView.cellForRowAtIndexPath(path)为?AddListTableViewCell"以避免警告?
编辑还有一个功能,使用它(抱歉没有缩进,从手机发布):
private func addList () {
let path = NSIndexPath(forRow: brain.tree.count, inSection: 0)
let cell = tableView.cellForRowAtIndexPath(path) as! AddListTableViewCell
if let listName = cell.addListTextBox.text {
if listName.characters.filter({!" ".characters.contains($0)}).count > 0 {
brain.newList(listName)
cell.addListTextBox.text = ""
isAddingList = false
ListsTableView?.reloadData()
performSegueWithIdentifier("ShowTasksSegue", sender: nil)
}
}
}