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
}
您應該顯示您的代碼以獲取更多詳細信息。 –
我會嘗試在你的數據源方法中放置一個斷點來真正看到發生了什麼。似乎數據中可能存在中間狀態? –
@AdamCampbell是的,這是一個好主意,也可以通過添加一個'test'按鈕來試驗.reloadData()的組合,就像只針對特定索引路徑和部分的組合一樣。 – MTsiang