如何在 Swift3 中向我的 CustomCell 添加事件
How to add event to my CustomCell in Swift3
我有一个 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()
}
}
}
直到我升级这个工作并且委托总是有一个值,现在它总是 nil 并且永远不会调用 segue。
自从我升级后我需要做些什么不同的事情才能让它再次工作?
确保您在 cellForRowAtIndexPath
中为单元分配您的代表。
另外,我建议保留对委托的 weak
引用。
protocol CustomCellDelegator: class {
func callSegueFromCell()
}
在你的 CustomTableViewCell
中替换
var delegate:CustomCellDelegator!
与
weak var delegate: CustomCellDelegator?
在此之后你不需要检查你的代表是否 nil
,你的应用程序不会崩溃。
确保您已在 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
}
}
我有一个 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()
}
}
}
直到我升级这个工作并且委托总是有一个值,现在它总是 nil 并且永远不会调用 segue。
自从我升级后我需要做些什么不同的事情才能让它再次工作?
确保您在 cellForRowAtIndexPath
中为单元分配您的代表。
另外,我建议保留对委托的 weak
引用。
protocol CustomCellDelegator: class {
func callSegueFromCell()
}
在你的 CustomTableViewCell
中替换
var delegate:CustomCellDelegator!
与
weak var delegate: CustomCellDelegator?
在此之后你不需要检查你的代表是否 nil
,你的应用程序不会崩溃。
确保您已在 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
}
}