CollectionView Extension numberOfItemsInSection verändern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CollectionView Extension numberOfItemsInSection verändern

    Hallo,

    aktuell arbeite ich an einer CollectionView die ich auch bereits erfolgreich erstellt habe. Ich möchte nun die Anzahl der Zellen innerhalb der CollectionView über die Funktion numberOfItemsInSection verändern.
    An sich also keine große Sache doch jetzt kommt der Punkt an dem ich scheitere. Meine CollectionView befindet sich in einer TableViewCell und ich rufe die CollectionView Funktionen über eine Extension in meiner TableViewCell auf.

    Aktuell werden so wie ihr seht, 12 Zellen angezeigt. Da die Zahl der Zellen innerhalb der CollectionViews jedoch variieren kann, will ich auf eine Funktion bzw. auf eine Variable in meinem TableViewController zugreifen. Ich weiß jedoch nicht wie...

    Wenn mein TableViewController aufgerufen wird, dann wird die Funktion setQuestionData() ausgeführt und items mit Inhalt gefüllt. Am liebsten würde ich also auf meine Variable items zugreifen und den Inhalt über count durchzuzählen um dann die Anzahl der Zellen in der CollectionView zu bestimmen.

    Ich hoffe das ganze ist für euch verständlich. Wäre echt super wenn jemand einen guten Rat für mich hat oder sogar weiß wie ich mein Problem behandeln kann :D

    HomeTableViewCell ( Hier will ich am liebsten auf setQuestionData/items zugreifen :(

    Quellcode

    1. class HomeTableViewCell: UITableViewCell {
    2. @IBOutlet var cellLabel: UILabel!
    3. @IBOutlet var imageV: UIImageView!
    4. }
    5. extension HomeTableViewCell: UICollectionViewDataSource, UICollectionViewDelegate {
    6. func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    7. return 12
    8. }
    9. func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    10. let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "HomePhotoCell", for: indexPath) as! UICollectionViewCell
    11. return cell
    12. }
    13. }
    14. extension HomeTableViewCell: UICollectionViewDelegateFlowLayout {
    15. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    16. let itemsPerRow:CGFloat = 2
    17. let hardCodedPadding:CGFloat = 5
    18. let itemWidth = (collectionView.bounds.width / itemsPerRow) - hardCodedPadding
    19. let itemHeight = collectionView.bounds.height - (2 * hardCodedPadding)
    20. return CGSize(width: itemWidth, height: itemHeight)
    21. }
    22. }
    Alles anzeigen

    Hier mein HomeTableViewController:

    Quellcode

    1. import UIKit
    2. import SDWebImage
    3. class HomeTableViewController: UITableViewController, UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate {
    4. @IBOutlet var demoTableView: UITableView!
    5. var login_session = "mAbgVTuwGc71kttEAtR39QsjvEvkFF"
    6. var items: RootElement = RootElement()
    7. var savedUsers = [UserInfo]() //Array mit allen User/Question Daten
    8. let defaults = UserDefaults.standard
    9. override func viewDidLoad() {
    10. super.viewDidLoad()
    11. }
    12. override func viewDidAppear(_ animated: Bool) {
    13. setQuestionData()
    14. }
    15. //Besorgt die Daten
    16. func setQuestionData() {
    17. let baseURL = URL(string: url)!
    18. var request = URLRequest(url: baseURL)
    19. request.setValue(login_session, forHTTPHeaderField: "Authorization")
    20. request.httpMethod = "GET"
    21. let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
    22. guard let data = data else { return }
    23. let decoder = JSONDecoder()
    24. self.items = (try? decoder.decode(RootElement.self, from: data)) ?? RootElement()
    25. self.savedUsers.append(contentsOf: self.items.data)
    26. print(self.savedUsers)
    27. DispatchQueue.main.async {
    28. self.demoTableView.reloadData()
    29. }
    30. }
    31. task.resume()
    32. }
    33. override func numberOfSections(in tableView: UITableView) -> Int {
    34. return 1
    35. }
    36. override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    37. return savedUsers.count
    38. }
    39. override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    40. guard let cell = tableView.dequeueReusableCell(withIdentifier: "QuestionLine", for: indexPath) as? HomeTableViewCell else { fatalError()}
    41. demoTableView.rowHeight = 335
    42. tableView.tableFooterView = UIView(frame: CGRect.zero)
    43. return cell
    44. }
    45. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von ThisIsBeat ()

  • Okay habe jetzt die rowHeight und die tableFooterView schon mal in die ViewDidLoad ausgelagert, danke dafür schon mal. Also ich glaube jetzt zu wissen was zu tun ist. Ich probiere das ganze mal aus und melde mich dann nochmal falls es Probleme geben sollte.
    Ansonsten schon mal Danke :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ThisIsBeat ()