2017-08-21 5 views
0

J'ai ma propriété connectée à ma vue de table à mon classe viewcontroller mais je suis incapable d'obtenir toutes mes cellules pour retourner dans les sections. Je veux des marges de 10pix entre chaque cellule et a réussi à le faire avec succès dans un autre VC, mais maintenant la méthode que j'utilise ne fait que renvoyer une cellule (il n'y a que 2 cellules au total) donc je voudrais aider à trouver un moyen de afficher toutes les cellules dans la section, le code est inclus ci-dessous:toutes les cellules de la vue en coupe ne sont pas renvoyées

//UITableViewDataSource 

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    let headerView = UIView() 

    headerView.layer.cornerRadius = 8.0 
    headerView.layer.masksToBounds = true 
    headerView.backgroundColor = UIColor.colorWithHex("A171FF") 

    let headerLabel = UILabel(frame: CGRect(x: 30, y: 0, width: 
     tableView.bounds.size.width, height: tableView.bounds.size.height)) 
    headerLabel.font = UIFont(name: "Gill Sans", size: 15) 
    headerLabel.textColor = UIColor.white 
    headerLabel.text = self.tableView(self.myWldTbl, titleForHeaderInSection: section) 
    headerLabel.sizeToFit() 
    headerView.addSubview(headerLabel) 

    return headerView 
} 

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 

    return sections[section] 
} 

func numberOfSections(in tableView: UITableView) -> Int { 
    return sections.count 
} 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    switch (section) { 
    case 0 : 
    return userMoves.count 
    case 1: 
    return rsvps.count 
    default : 
    print("unable to set up sections") 
    return 0 
    } 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    if indexPath.row % 2 != 0 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: MyWorldTableViewCell.self)) as! MyWorldTableViewCell 

     //cell appearance 
     cell.layer.cornerRadius = 8.0 
     cell.clipsToBounds = true 

     //cell data 
    let evt = userMoves[indexPath.row] 
    cell.rsvpCount.text = "\(rsvps.count)" 

    //evt img 
    if let evtImg = evt.event_photo_url { 
     cell.img.kf.setImage(with: URL(string: Constants.Server.PHOTO_URL + evtImg)) 
    } else { 
     cell.img.image = UIImage(named: "user_icon") 
    } 
    cell.ttl.text = evt.event_name! 

    return cell } else { 
     let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: InvisibleCell.self)) as! InvisibleCell 

     cell.backgroundColor = UIColor.clear 

     return cell 
    } 
} 


func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.row % 2 == 0 { 
     return 10.0 
    } 

    return 102.0 
} 

//UITableViewDelegate 


func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 30 
} 
+0

J'ai essayé de faire ce calcul mais j'ai reçu une erreur lorsque je construisais les cellules personnalisées indiquant que l'index était hors de portée dans l'instruction switch c'était userMoves.count * 2 pour essayer d'inclure les lignes invisibles ainsi – NightHawk95

Répondre

0

éDITÉE:

la première chose qui est source de confusion au sujet de votre code est que vous semblez avoir 2 sections montrant le contenu de 2 tableaux différents (par la logique dans numberOfRowsInSection), mais vous ne vérifiez pas le numéro de section dans cellForRowAt.

Avant toute chose, vous devez vérifier indexPath.section dans cellForRowAt pour vous assurer que vous utilisez la matrice correcte. Comme écrit, votre code utilise le tableau userMoves pour remplir les deux sections.

La cause de vos cellules manquantes est que vous devez prendre en compte les cellules séparatrices invisibles dans votre méthode numberOfRowsInSection. Vous avez eu la bonne idée de multiplier par 2:

switch (section) { 
    case 0 : 
     return userMoves.count * 2 
    //etc 
} 

Lorsque vous accédez au tableau, en cellForRowAt, vous devez diviser par 2 pour éviter l'indice hors exception des limites:

if indexPath.row % 2 != 0 { 
    //dequeue, etc. 

    let evt = userMoves[indexPath.row/2] 

    //etc. 
} 
+0

L'idée est d'ajouter un espacement entre les lignes, je ne vois pas l'impulsion derrière la vérification de la condition de la section – NightHawk95

+0

Ma réponse était incorrecte. J'ai clarifié ce que je voulais dire au sujet de la vérification de la condition de la section, parce que c'était un problème dans votre code. J'ai également ajouté ce que je crois être la bonne réponse (testé dans le projet d'exemple). –

+1

merci pour cette aide! – NightHawk95