簡體   English   中英

單例類無法正確更新

[英]Singleton Class not updating properly

我有一個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)


    }

由於您正在通過segue導航,因此有可能在調用didSelectItem之前加載了新的ViewController lbl2.text = sm2.cellChoose移動到viewWillAppear將解決您的問題。

使用segues的“正確”方法是在prepareForSegue處理此問題,但是您現在所擁有的將起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM