我正在我的应用程序中构建一个设置页面,因此使用静态单元格而不是动态单元格是有意义的,因为我从不在此视图中动态生成任何内容。
我采用了将表格拆分为每个类别的多个组的模式,即用户首选项,设置等。
我尝试使用UITableView
委托方法didSelectRowAtIndexPath
,但在调试时,我似乎总是为我的单元格传递一个空值。我需要做的是从标签中提取文本以描述没有segue的单元格的操作(例如Logout和Delete Account,这些只是提供一个确认模式,然后处理操作)
我的didSelectRowAtIndexPath
方法:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)
if cell != nil {
// Set the CellID
var cellID: AnyObject! = (cell?.textLabel!.text == nil) ? "" : cell?.textLabel?.text
// The values are hardcoded so we can switch with confidence
switch cellID as String {
case "Logout":
logout()
default:
println("un-managed action \(cellID.localizedDescription) and \(cellID) index path: \(indexPath)")
}
}
}
为什么我总是打印nil
?我唯一的猜测是它在所有可用部分中查找索引0并且不能假设我指向的是哪个单元格因此返回nil
对象,一些澄清和解决方案会很棒
答案 0 :(得分:3)
正如您的评论中所清楚的那样,您从未专门设置单元格的textLabel
属性;您只在界面中向单元格添加了UILabel
。假设您只为每个单元格添加了一个标签,您可以遍历单元格的子视图并通过查找UILabel
子视图动态访问标签,例如:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)
if cell != nil {
// Set the CellID
var label:UILabel = UILabel()
for subview in self.view.subviews {
if subview is UILabel {
label = subview as UILabel
break
}
}
var cellID: AnyObject! = (label.text == nil) ? "" : label.text
// The values are hardcoded so we can switch with confidence
switch cellID as String {
case "Logout":
logout()
default:
println("un-managed action \(cellID.localizedDescription) and \(cellID) index path: \(indexPath)")
}
}
}
如果您的单元格中有多个标签,则可以为每个标签添加标签,然后检查for循环中的标签。