swift - 从 tableview 生成全局变量计数器
问题描述
我正在使用一个 UITableview 连接到一个 UIViewController。根据选择的 UITableview 行,UIViewController 上的材料只有轻微的变化。
我在使用多个 UIViewControllers 之前已经完成了它,因为 UIViewControllers 之间有很多不同之处,例如布局等。但作为视图控制器之间的唯一一个简单区别,我想使用全局计数器变量。我想使用将计数器的值设置为所选行的值并全局存储该值。
我声明柜台:
var counter: Int?
Then when a row is selected I set the counter value to that row and perform a segue:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
counter = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)
}
在 viewController 中,我选择counter
了'nil'
. 为什么是这样?我该如何解决它。我知道这不是最佳实践,但这是我想在这种情况下尝试做的事情。
解决方案
变量的值counter
成为nil
预期。因为当你要segue一个新的控制器时,你没有分配计数器变量的值。您只需使用tableView
didSelect
方法更新现有控制器的计数器变量。这个问题有几个解决方案。在这里分享一个最方便的。
class ViewController: UIViewController, UITableViewDelegate {
@IBOutlet var tableView: UITableView!
var counter: Int?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
counter = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
if let destinationVC = segue.destination as? ViewController {
destinationVC.counter = counter
}
}
}
推荐阅读
- arm - gem5 完整系统 Linux 启动失败并显示“内核恐慌 - 未同步:VFS:无法挂载根 fs”
- html - 如何将此菜单分成两列?
- vue.js - 从 Vue 指令中获取目标元素
- amazon-web-services - 如何检查 dynamoDB 表被访问的次数
- javascript - 我无法启用 google my business api
- c# - Asp.Net MVC 路由概念
- java - 在 Java Spring boot 中理解映射的问题
- java - 在java中按多个字段排序列表(而不是比较)
- mongodb - Meteor 连接随机丢失,mongo 集合查找返回 null
- firebase - 允许在每天的特定时间在 FireStore 中进行更新