我有一个UITableView,其行包含两个UISwitch按钮。在我升级到Xcode8之前,我和我一起向视图控制器添加了一个协议
protocol CustomCellDelegator {
func callSegueFromCell()
}
然后我将以下内容添加到我的CustomCell swift文件中,该文件处理我的自定义单元格的出口。
open class CustomTableViewCell: UITableViewCell {
var delegate:CustomCellDelegator!
@IBOutlet weak var uidLabel: UILabel!
@IBOutlet weak var stateLabel: UILabel!
@IBOutlet weak var operatedSwitch: UISwitch!
@IBOutlet weak var switchRTN: UISwitch!
override open func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
@IBAction func operatedSwitchChange() {
if operatedSwitch.isOn {
AppDelegate.myGlobalVars.gSwitchType = "OpsOn"
}
else {
AppDelegate.myGlobalVars.gSwitchType = "OpsOff"
}
if(self.delegate != nil){ //Just to be safe.
self.delegate.callSegueFromCell()
}
}
@IBAction func rtnSwitchChange() {
if switchRTN.isOn {
AppDelegate.myGlobalVars.gSwitchType = "RtnOn"
}
else {
AppDelegate.myGlobalVars.gSwitchType = "RtnOff"
}
if(self.delegate != nil){ //Just to be safe.
self.delegate.callSegueFromCell()
}
}
}
在我升级之前,这个工作和委托总是有一个值,现在它总是为零而且从不调用segue。
自从我升级以使其再次运行后,我需要做些什么?
答案 0 :(得分:0)
确保您在cellForRowAtIndexPath
中为您的代理人分配了该代表。
另外,我建议保留weak
对代表的引用。
protocol CustomCellDelegator: class {
func callSegueFromCell()
}
在CustomTableViewCell
替换
var delegate:CustomCellDelegator!
带
weak var delegate: CustomCellDelegator?
在此之后,您无需检查您的代表是否为nil
,您的应用不会崩溃。
答案 1 :(得分:0)
确保您已在ViewController中分配了您的代理:
// Make your ViewController conform to the protocol
class MyViewController: CustomCellDelegator {
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier("MyCellIdentifier", forIndexPath: indexPath) as! CustomTableViewCell
cell.delegate = self
return cell
}
func callSegueFromCell() {
// perform your segue here
}
}