2017-06-16 69 views
0

我基於分段控件選擇索引顯示來自2個不同數組的2組數據。一切工作正常,所有正確的數據加載。然而,有一件事很奇怪的事情發生:Swift 3 Xcode 8集合使用分段控件查看重新加載數據

當我按下其他分段控制「按鈕」,集合視圖應該很順利地切換(在分段控制IBAction中實現reloadData())。但是在「正確的數據」加載之前它會非常快速地閃爍。我試過重新啓動Xcode,甚至把它給了一個朋友來測試,但是快速的'flash'仍然存在。當我從分段控制'按鈕2'返回分段控制'button1'時也會發生。

當我仔細看看什麼閃爍時,事實證明,收集視圖以快速(非常快!)切換回其「正確」之前,以隨機順序顯示數據(或似乎是)訂購。

這裏是我的視圖控制器:

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. 
} 

var array1 = ["Red", "Yellow", "Purple"] 
var array2 = ["Apple", "Banana", "Grape"] 

@IBAction func segmentedControl(_ sender: UISegmentedControl) { 
    collectionView.reloadData() 
    // Reload Data 
    collectionView.reloadItems(at: collectionView.indexPathsForVisibleItems) 
    // Prevents 'flash' from .reloadData() 
} 

@IBOutlet weak var segmentedOutlet: UISegmentedControl! 
// Creates an outlet for segmented control (that can be set) 

@IBOutlet weak var collectionView: UICollectionView! 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    switch segmentedOutlet.selectedSegmentIndex { 
    case 0 : return array1.count 
    case 1 : return array2.count 
    default: return 0 
    } 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! collectionViewCell 

    switch segmentedOutlet.selectedSegmentIndex { 
    case 0 : cell.button.setTitle(array1[indexPath.row], for: .normal) 
    case 1 : cell.button.setTitle(array2[indexPath.row], for: .normal) 
    default : break 
    } 
    return cell 
} 
+0

您應該顯示您的代碼以獲取更多詳細信息。 –

+0

我會嘗試在你的數據源方法中放置一個斷點來真正看到發生了什麼。似乎數據中可能存在中間狀態? –

+0

@AdamCampbell是的,這是一個好主意,也可以通過添加一個'test'按鈕來試驗.reloadData()的組合,就像只針對特定索引路徑和部分的組合一樣。 – MTsiang

回答

0

好了,所以我已經找到一種方法來解決這個問題。基本上後:

collectionView.reloadData()

添加

collectionView.reloadItems(在:collectionView.indexPathsForVisibleItems)

繞過厭惡和相當惱人的 '閃爍',你可能會得到時使用集合視圖切換分段控件。

相關問題