Swift:自定义单元格中的 IBoutlets 为零
Posted
技术标签:
【中文标题】Swift:自定义单元格中的 IBoutlets 为零【英文标题】:Swift: IBoutlets are nil in Custom Cell 【发布时间】:2014-10-16 18:10:45 【问题描述】:我不知道为什么没有输出这个自定义单元格。
我在情节提要中设置了一个自定义单元格(无笔尖)。 当我尝试在自定义单元格类中访问它们时,我有一个文本字段和 2 个标签。我几乎可以肯定我已经正确连接了所有东西,但仍然为零。
我在情节提要中选择了我的表格单元格并将自定义类设置为TimesheetTableViewCell
我还控制点击表格并将数据源和委托设置为TimesheetViewController
我的自定义单元格类:
import UIKit
class TimesheetTableViewCell: UITableViewCell
@IBOutlet var duration: UITextField!
@IBOutlet var taskName: UILabel!
@IBOutlet var taskNotes: UILabel!
required init(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
override init?(style: UITableViewCellStyle, reuseIdentifier: String!)
super.init(style: style, reuseIdentifier: reuseIdentifier)
println("Cell's initialised")// I see this
println(reuseIdentifier)// prints TimesheetCell
override func setSelected(selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
func setCell(duration: String, taskName: String, taskNotes: String)
println("setCell called")
self.duration?.text = duration
self.taskName?.text = taskName
self.taskNotes?.text = taskNotes
我的控制器:
class TimesheetViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
@IBOutlet var timesheetTable: UITableView!
var items = ["Item 1", "Item2", "Item3", "Item4"]
override func viewDidLoad()
super.viewDidLoad()
self.timesheetTable.registerClass(TimesheetTableViewCell.self, forCellReuseIdentifier: "TimesheetCell")
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("TimesheetCell", forIndexPath: indexPath) as TimesheetTableViewCell
println(items[indexPath.row]) // prints corresponding item
println(cell.duration?.text) // prints nil
cell.setCell(items[indexPath.row], taskName: items[indexPath.row], taskNotes: items[indexPath.row])
return cell
【问题讨论】:
而不是self.timesheetTable.registerClass(...)
:使用self.timesheetTable.registerNib(...)
,也许...?
【参考方案1】:
问题出在这一行:
self.timesheetTable.registerClass(TimesheetTableViewCell.self, forCellReuseIdentifier: "TimesheetCell")
删除它。那行说:“不要不从情节提要中获取单元格。”但是您确实想从情节提要中获取单元格。
(但是,请确保单元格的标识符在故事板中为 "TimesheetCell"
,否则您会崩溃。)
【讨论】:
好的,我的默认单元格数据显示出来了。谢谢!不过,我似乎仍然无法访问 iboutlets,知道吗?尝试在 cell.setCell 中设置 self.taskName?.text = "something" 无效,因为 taskName 为 nil 请向我证明,从单元格到单元格中的标签的插座真的连接起来了! 哈哈!我会,但我已经继续并更改了我的代码。我最终重新开始并创建了一个 nib 以及自定义单元格类,然后在我的控制器 viewdidload() 中我称之为 self.timesheetTable.registerNib(UINib(nibName: "TimesheetTableViewCell", bundle: nil)!, forCellReuseIdentifier: "TimesheetCell ”)。感谢您的帮助,马特,谢谢。 对于故事板实例化和配置的单元格,我认为这是您想要的:github.com/mattneub/Programming-ios-Book-Examples/tree/master/… @matt 谢谢matt,我想通了,忘了在需要的方法中使用super.init(coder:)【参考方案2】:很确定您需要删除该行
self.timesheetTable.registerClass(TimesheetTableViewCell.self, forCellReuseIdentifier: "TimesheetCell")
来自 viewDidLoad()。
【讨论】:
以上是关于Swift:自定义单元格中的 IBoutlets 为零的主要内容,如果未能解决你的问题,请参考以下文章
SWIFT:从自定义单元格中的 UIswitch 展开/折叠自定义单元格
swift UIViewController用于自定义单元格中的按钮
如何在 swift 3 中的 tableview 单元格中添加带有自定义视图的 collectionView?