#ios #swift
#iOS #swift
Вопрос:
У меня есть очень простой CollectionView, который показывает 4 кнопки, каждая с именем черепах. Когда я нажимаю любую кнопку, я хочу обновить свой CollectionView на случай, если мой массив увеличился и было добавлено 5-е имя, которое затем должно отображаться как 5-я кнопка. В принципе, это работает, но в тот момент, когда я нажимаю и отпускаю любую кнопку, заголовки кнопок отображают мой массив от последнего к первому, а затем переключаются обратно на первый к последнему.
Кто-нибудь знает, почему это происходит и как я могу это остановить?
Я просто хочу обновлять свой CollectionView при каждом нажатии кнопки. Если массив должен увеличиться, скажем, «Осколок», я хочу, чтобы названия кнопок оставались неизменными на первых четырех кнопках и добавлялась только 5-я кнопка.
Заранее большое вам спасибо!
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet weak var meineCV: UICollectionView!
let cv = CollectionViewCell()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return cv.turtles.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
cell.meinButton.setTitle(cv.turtles[indexPath.row], for: .normal)
cell.meinButton.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)
return cell
}
@IBAction func buttonAction(_ sender: UIButton) {
print(sender.currentTitle!)
meineCV.reloadData()
}
}
class CollectionViewCell: UICollectionViewCell {
@IBOutlet weak var meinButton: UIButton!
let turtles: [String] = ["Leonardo", "Donatello", "Michelangelo", "Raphael"]
}
Комментарии:
1. Почему
turtles
массив находится внутриCollectionViewCell
?2. да, я знал, что этот вопрос возникнет 🙂 Для этого простого примера нет особой причины, по которой я не поместил его в ViewController. Но я очень сомневаюсь, что именно по этой причине мои метки кнопок меняются с last-> first, а затем сразу же возвращаются к first-> last после запуска reloadData() . Или это так?
3. Я не уверен, что происходит не так, но просто очень странно помещать источники данных
turtle
внутри ячейки. В каждой ячейке, которую вы удаляете из очереди, они хранятturtle
s … это сбивает с толку и не нужно.4. Я не знал, что вся «черепаха» хранится в каждой отдельной ячейке. Я только недавно начал с Swift 🙂 Спасибо, ахезе, что указал на это!
Ответ №1:
Как я понял, вы видите, что метки кнопок меняются в момент нажатия жестов, и вы хотите избавиться от этого.
Пожалуйста, попробуйте это:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
let turtle = cv.turtles[indexPath.row]
cell.meinButton.titleLabel?.text = turtle
cell.meinButton.setTitle(turtle, for: .normal)
cell.meinButton.addTarget(self, action: #selector(buttonAction(_:)), for: .touchUpInside)
return cell
}
Комментарии:
1. Это сделало это! Большое вам спасибо за вашу помощь! Мне все еще интересно, почему он меняет порядок, когда. запускается reloaddata() . Так что, если у кого-нибудь есть ответ, пожалуйста, дайте мне знать 🙂