(Swift) 使用回调函数将数据传递到另一个 viewController
(Swift) Pass data into another viewController using callBack function
情况:
我有一个包含许多单元格的 tableView。每个单元格都有相同的 type/class,每个单元格都有一个 toggleSwitch。
其中一个单元格,或者更准确地说是第 2 节第 0 行中的单元格,当它的开关被切换时,需要将 bool 类型的变量更新为 true/false(如果开关打开 => 真)。该变量在一秒内 VC.
使用下面的代码,无论点击哪个单元格,它都会打印 switch is on/switch is off
,但我只需要上面提到的单元格。
单元格的 class:
@IBOutlet weak var labelCell: UILabel!
@IBOutlet weak var cellSwitch: UISwitch!
@IBAction func toggleSwitch(_ sender: Any) {
if cellSwitch.isOn == true {
print("switch is on")
}
else {
print("switch is off")
}
}
在 cellForRowAt:
case (2,0):
cell.labelCell.text = "Shuffled"
let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let cardVC = (mainStoryboard.instantiateViewController(withIdentifier: "CardViewController") as! CardViewController)
//place for condition, if switch is on/off, put the true/false to secondVC.shuffle
cardVC.shuffle = true
我的问题是我的回调函数应该是什么样子,我没有使用过它们。以及如何检查这个 (2,0) 单元格是否被点击?
将此回调函数声明到您的 tableViewCell 文件中,如下所示。
var callback:((Bool) -> Void)?
@IBAction func toggleSwitch(_ sender: Any) {
if cellSwitch.isOn == true {
print("switch is on")
callback?(true)
}
else {
print("switch is off")
callback?(false)
}
}
您可以使用 didSelectRowAt 方法 UITableViewDelegate.
获取行点击
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.section == 2 {
if indexPath.row == 0 {
// the tapped detect of (2,0)
}
}
}
并且您可以从 cellForRowAt 方法获取 UISwitch 的 callBack 点击操作,如下所示。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 2 {
var cell = tableView.dequeueReusableCell(withIdentifier: "yourCell") as! YourCell
if indexPath.row == 0 {
//here you can write your callBack closure & your UISwitch's value will retrived here
cell.callback = { [unowned self] check in
cardVC.shuffle = check
}
}
}
}
情况:
我有一个包含许多单元格的 tableView。每个单元格都有相同的 type/class,每个单元格都有一个 toggleSwitch。
其中一个单元格,或者更准确地说是第 2 节第 0 行中的单元格,当它的开关被切换时,需要将 bool 类型的变量更新为 true/false(如果开关打开 => 真)。该变量在一秒内 VC.
使用下面的代码,无论点击哪个单元格,它都会打印 switch is on/switch is off
,但我只需要上面提到的单元格。
单元格的 class:
@IBOutlet weak var labelCell: UILabel!
@IBOutlet weak var cellSwitch: UISwitch!
@IBAction func toggleSwitch(_ sender: Any) {
if cellSwitch.isOn == true {
print("switch is on")
}
else {
print("switch is off")
}
}
在 cellForRowAt:
case (2,0):
cell.labelCell.text = "Shuffled"
let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let cardVC = (mainStoryboard.instantiateViewController(withIdentifier: "CardViewController") as! CardViewController)
//place for condition, if switch is on/off, put the true/false to secondVC.shuffle
cardVC.shuffle = true
我的问题是我的回调函数应该是什么样子,我没有使用过它们。以及如何检查这个 (2,0) 单元格是否被点击?
将此回调函数声明到您的 tableViewCell 文件中,如下所示。
var callback:((Bool) -> Void)?
@IBAction func toggleSwitch(_ sender: Any) {
if cellSwitch.isOn == true {
print("switch is on")
callback?(true)
}
else {
print("switch is off")
callback?(false)
}
}
您可以使用 didSelectRowAt 方法 UITableViewDelegate.
获取行点击func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.section == 2 {
if indexPath.row == 0 {
// the tapped detect of (2,0)
}
}
}
并且您可以从 cellForRowAt 方法获取 UISwitch 的 callBack 点击操作,如下所示。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 2 {
var cell = tableView.dequeueReusableCell(withIdentifier: "yourCell") as! YourCell
if indexPath.row == 0 {
//here you can write your callBack closure & your UISwitch's value will retrived here
cell.callback = { [unowned self] check in
cardVC.shuffle = check
}
}
}
}