2016-11-02 5 views
0

JSON을 통해 들어오는 데이터가 있고 일부 논리에 따라 데이터를 내 컬렉션 뷰에서 전환 할 수있었습니다. 로그인 한 경우 한 세트의 데이터가 표시되고 로그 아웃하면 다른 데이터 세트가 표시됩니다. 하지만 이제는 버튼 푸시를 기반으로 내 컬렉션보기의 데이터를 변경하려고합니다. 두 개의 버튼이 있습니다. 하나는 "모든 제품"을 보여주고 다른 하나는 "설치된 제품"을 보여줍니다. 어떻게 데이터를 전환하기 위해 단추를 밀어 넣을 수 있습니까?버튼을 사용하여 NSCollectionView의 데이터를 변경하는 방법

CollectionView 논리

extension ViewController: NSCollectionViewDataSource, NSCollectionViewDelegate, NSCollectionViewDelegateFlowLayout{ 


func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int { 

    let prefs:UserDefaults = UserDefaults.standard 
    let isLoggedIn:Int = prefs.integer(forKey: "ISLOGGEDIN") as Int 

    if (isLoggedIn == 1) { 


    return installedArray?.count ?? 0 
    } 

    return productsArray?.count ?? 0 
} 


func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem { 

    let prefs:UserDefaults = UserDefaults.standard 
    let isLoggedIn:Int = prefs.integer(forKey: "ISLOGGEDIN") as Int 

    if (isLoggedIn == 1) { 


    let item = collectionView.makeItem(withIdentifier: "Installed", for: indexPath) as! Installed 

     item.buildProduct = installedArray?[indexPath.item] 

    return item 
    } 

    let itemB = collectionView.makeItem(withIdentifier: "test1", for: indexPath) as! test1 

    itemB.buildProduct = productsArray?[indexPath.item] 

    return itemB 

} 

버튼

@IBAction func allAppsPushed(_ sender: Any) { 

    let prefs:UserDefaults = UserDefaults.standard 
    let isLoggedIn:Int = prefs.integer(forKey: "ISLOGGEDIN") as Int 

    if (isLoggedIn == 1) { 




    }else{ 


    } 


} 

@IBAction func installedPushed(_ sender: Any) { 

    let prefs:UserDefaults = UserDefaults.standard 
    let isLoggedIn:Int = prefs.integer(forKey: "ISLOGGEDIN") as Int 

    if (isLoggedIn == 1) { 



    }else{ 



    } 
} 

답변

0

는 버튼 방식의 collectionView.reloadData()를 호출하십시오. 그러면 collectionView가 데이터를 완전히 다시로드하게되고 isLoggedIn 플래그가 상태를 변경 했으므로 다른 데이터를로드해야합니다.

+0

내가 말하는 내용을 이해하지만 로그인 한 경우에만 내 데이터가 변경됩니다. 내가 로그인했는지 여부에 의존하고 싶지 않습니다. 버튼 누름에 따라 순전히 바꿀 필요가 있습니다. 나는 네가 한 말을 시도했지만 아무것도 바뀌지 않았다. 이미 존재하는 동일한 데이터를 다시로드하고 전환하지 않습니다. – Eseye

+0

그래서 버튼이 뷰 컨트롤러의 인스턴스 변수를 변경 한 다음 콜렉션 뷰의'collectionView : cellForItemAtIndexPath :'메소드에서 해당 인스턴스 변수의 값을 사용하여 콜렉션 뷰에 표시 할 것을 결정하십시오. –

+0

당신은 이런 식의 예가 있습니까? 나는 작동하는 솔루션을 가지고 있지만 당신의 방법에 대해서도 궁금합니다. – Eseye

0

전역 변수로 isLoggedIn을 전역 변수로 이동하고 각 버튼에서 먼저 변수를 설정 한 다음 내 논리를 확인하고 이제는 내 데이터 사이를 전환합니다!

@IBAction func allAppsPushed(_ sender: Any) { 

    isLoggedIn = 1 

    if (isLoggedIn == 1) { 

     colView.reloadData() 

    }else{ 

    } 
} 


@IBAction func installedPushed(_ sender: Any) { 

    isLoggedIn = 0 

    if (isLoggedIn == 1) { 

     colView.reloadData() 

    }else{ 

     colView.reloadData() 

    } 
}