2017-10-02 1 views
1

간단한 수준의 디자인을 작성하려고하지만 조건이 충족되면 즉시 셀의 데이터를 다시로드하는 데 문제가 있습니다. 사용자는 보조 게임 통화 (별)를 사용하여 아직 충분한 포인트가없는 레벨의 잠금을 해제 할 수 있습니다. 잠긴 레벨을 클릭하면 별 수가 충분하면 잠금을 해제 할 수 있습니다.특정 조건이 충족되면 즉시 UICollectionView 셀을 다시로드하는 방법

제가하는 데 문제는 수준이 즉시 모달이 기각되면 내가 데이터를 다시로드 셀의 순서를 다시 수준의 컬렉션을보기로 돌아가 다음보기를 변경하고이 잠금을 해제하지 않는다는 것입니다

내 스토리 보드 : enter image description here

아래에 내 코드 : 의 ViewController

import UIKit 

var stars = 10 
var points = 11 
var completeLevels:[String] = [] 

let levels = ["1","2","3","4","5","6","7","8","9"] 

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate 
{ 


@IBOutlet weak var collectionView: UICollectionView! 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

} 

override func viewDidAppear(_ animated: Bool) 
{ 
    if points >= 10 
    { 
     completeLevels.append(levels[0]) 
    } 
    if points >= 20 
    { 
     completeLevels.append(levels[1]) 
    } 
    if points >= 30 
    { 
     completeLevels.append(levels[2]) 
    } 
    if points >= 40 
    { 
     completeLevels.append(levels[3]) 
    } 
    if points >= 50 
    { 
     completeLevels.append(levels[4]) 
    } 
    if points >= 60 
    { 
     completeLevels.append(levels[5]) 
    } 
    if points >= 70 
    { 
     completeLevels.append(levels[6]) 
    } 
    if points >= 80 
    { 
     completeLevels.append(levels[7]) 
    } 
    if points >= 90 
    { 
     completeLevels.append(levels[8]) 
    } 
    completeLevels = Array(Set(completeLevels)).sorted() 

    collectionView.reloadData() 

} 

override var prefersStatusBarHidden: Bool 
{ 
    return true 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
{ 
    return levels.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
{ 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! LevelCollectionViewCell 
    cell.levelName.text = levels[indexPath.row] 

    cell.lockedLevel.alpha = 1 
    for objects in completeLevels 
    { 
     if levels.contains(objects) 
     { 
      if levels.index(of: objects) == indexPath.row 
      { 
       cell.lockedLevel.alpha = 0 

      } 


     } 
    } 


    return cell 
} 

} 

levelCollectionViewCell

,
import UIKit 

class LevelCollectionViewCell: UICollectionViewCell 
{ 
    @IBOutlet weak var lockedLevel: UIButton! 
    @IBOutlet weak var levelName: UILabel! 


} 

modalViewController

import UIKit 

class modalViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


@IBAction func dismissModal(_ sender: Any) 
{ 
    dismiss(animated: true, completion: nil) 
} 

@IBOutlet weak var noStarsLabel: UILabel! 
@IBAction func back(_ sender: Any) 
{ 
    dismiss(animated: true, completion: nil) 
} 

@IBAction func unlockLevel(_ sender: UIButton) 
{ 
    if stars >= 10 
    { 

     points += 10 
     stars -= 10 

     dismiss(animated: true, completion: nil) 

    }else{ 
     noStarsLabel.text = "NOT ENOUGH STARS !" 
    } 
} 


override var prefersStatusBarHidden: Bool 
{ 
    return true 
} 

} 

gameViewController 내가 코드에서 어디에서 modalViewController에 저장된 참조를 볼 수 없습니다

import UIKit 

class gameViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


@IBAction func addStars(_ sender: UIButton) 
{ 
    stars += 10 
} 

@IBAction func addPoints(_ sender: UIButton) 
{ 
    points += 10 
} 

} 
+0

당신은 의미합니까'collectionView.reloadData()':

또한의 UIViewController의 viewWillDisappear이 collectionView를 다시로드 트리거 무시할 수 있을까? – the4kman

답변

0

(전체 게임 포인트와 별을 받고 시뮬레이션) 당신이 공유했습니다. 그러나이 문제를 처리하는 가장 좋은 방법은 당신의 @IBAction func dismissModal(_ sender: Any)을 변경하는 것입니다 :에 따라, 이제

@IBAction func back(_ sender: Any) 
{ 
    collectionView.reloadData() 
    dismiss(animated: true, completion: nil) 
} 

을/VC이 modalViewController을 제시 당신은 무엇을 다시로드를 처리 할 프로토콜을 만들어야합니다, 또는 참조를 저장할 수 사용자의 선택에 따라 collectionView가 데이터/뷰를 업데이트하도록하려는 것처럼 들리는 것처럼 보입니다. 이것이 내가 처리 할 방법입니다.

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    collectionView.reloadData() 
} 
관련 문제