我有一个collectionViewController和一个普通的viewcontroller。当点击一个单元格时,它会转到VC并将标签设置为轻敲的单元格。这个变量是一个单例类。
我遇到的问题是,当您第一次点击一个单元格并转到VC时,标签不会说任何内容(控制台会打印正确的数据)。然后你回到collectionView并点击一个不同的单元格,视图中的标签现在显示你之前点击的单元格。
我尝试清理构建文件夹等,但没有做任何事情。我还尝试了另一种方法 - let CVC = CollectionViewController()
然后lbl.text = CVC.cellTapped
(先创建var),但这也没有用。
SharingManager.swift
class SharingManager {
var cellChoose = String()
static let sharedInstance = SharingManager()
}
CollectionViewController.swift
class CollectionViewController: UICollectionViewController {
let sm = SharingManager.sharedInstance
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 3
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
// Configure the cell
let lbl = cell.viewWithTag(1) as! UILabel
lbl.text = String(indexPath.row)
return cell
}
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
sm.cellChoose = "cell\(indexPath.row)"
print(sm.cellChoose)
}
}
VC2.swift (点按一个单元格的视图控制器会将您带到)
class VC2: UIViewController {
let sm2 = SharingManager.sharedInstance
@IBOutlet weak var lbl2: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.lbl2.text = sm2.cellChoose
//print(sm2.cellChoose)
}
答案 0 :(得分:0)
由于您是通过segue进行导航,因此在调用ViewController
之前可能会加载新的didSelectItem
。将lbl2.text = sm2.cellChoose
移至viewWillAppear
将解决您的问题。
使用segues执行此操作的“正确”方法是在prepareForSegue
处理此问题,但您现在所拥有的将会有效。