Я отображаю 2 набора данных из 2 разных массивов на основе выбранного индекса сегментированного элемента управления. Все работает нормально, все нужные данные загружаются. Однако происходит одна очень странная вещь:
Когда я нажимаю другую «кнопку» сегментированного элемента управления, представление коллекции должно переключаться довольно плавно (реализовано reloadData () в сегментированном элементе управления IBAction). Но перед загрузкой «правильных данных» он очень быстро мигает. Я попытался перезапустить Xcode и даже дал его другу для тестирования, однако быстрая «вспышка» осталась. Это также происходит, когда я возвращаюсь к сегментированному элементу управления button1 из сегментированного элемента управления button 2.
Когда я внимательно смотрю на то, что мигает, оказывается, что представление коллекции отображает данные из моего массива в случайном порядке (или так кажется), прежде чем быстро (очень быстро!) Переключиться обратно в свой «правильный» порядок.
Вот мой контроллер представления:
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
}