2015-04-18 1 views
1

J'essaie de créer une tableView où, si vous appuyez sur une cellule, elle se développe et affiche les boutons. Le problème que j'ai eu jusqu'ici est que si je crée la cellule avec les boutons et disons qu'elle ne devrait avoir toute la hauteur que si vous appuyez dessus, elle montre encore les boutons mais ils se chevauchent avec les cellules suivantes dans la tableÉlargir le chevauchement UITableViewCell

Y a-t-il quelque chose que fait la partie de la cellule qui doit être cachée avant de la tapoter?

C'est ce que j'ai dans le viewController.m Le ExpandingCell.h vous trouverez ci-dessous

#import "ViewController.h" 
#import "ExpandingCell.h" 

@interface ViewController() <UITableViewDelegate, UITableViewDataSource> 

@property (copy, nonatomic) NSArray *titleArray; 
@property (strong, nonatomic) IBOutlet UITableView *tableView; 

@end 

@implementation ViewController 

ExpandingCell *cell; 
int selectedIndex = -1; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.titleArray = @[@"Apple", @"Orange", @"Banana", @"Kiwi", @"Melon", @"Strawberry", @"Blueberry", @"Peach"]; 

} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.titleArray count]; 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"expandingCell"; 

    cell = (ExpandingCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


    cell.titleLabel.text = self.titleArray[indexPath.row]; 

    return cell; 
} 

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (indexPath.row == 0) { 
     return 94; 
    } else { 
     return 54; 
    } 
} 

@end 

Les ExpandCell.h ne sont que quelques étiquettes et boutons qui sont sur la cellule

#import <UIKit/UIKit.h> 

@interface ExpandingCell : UITableViewCell 

@property (strong, nonatomic) IBOutlet UILabel *titleLabel; 
@property (strong, nonatomic) IBOutlet UILabel *scoreLabel; 
@property (strong, nonatomic) IBOutlet UILabel *backgroundLabel; 

@end 

juste pour le but du texte J'ai défini la première cellule comme si elle avait été sélectionnée dans: "tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath" Méthode. Ce que je reçois est une vue de table où la première cellule est parfaitement affichée avec sa hauteur et ensuite le reste des cellules où les boutons se chevauchent sur la cellule suivante ci-dessous.

(Je voulais montrer une capture d'écran, mais il me dit que je dois 10 réputation de le faire)

Si donc je suis très reconnaissant de l'aide

+0

s'il vous plaît télécharger un peu de code pour que nous vous aidons. –

+0

Comment changez-vous la hauteur de vos cellules? Est-ce que vous les rechargez et commencez à retourner différentes hauteurs dans heightForCellAtIndexpath? –

+0

Vous pouvez créer un lien vers la capture d'écran. Les étiquettes et les boutons sont-ils ajoutés dans le storyboard/XIB? Essayez de définir la vue du contenu de la cellule pour découper les sous-vues. – Wain

Répondre

3

Vous devez mettre en œuvre un tableView:heightForRowAtIndexPath: et retourner une hauteur de ligne qui dépend de l'état de votre cellule (étendue ou non). Ensuite, après avoir tapé sur votre téléphone, appelez le [self.tableView reloadRowsAtIndexPaths:@[indexPathForYourCell]]. Pour empêcher le chevauchement, définissez YES pour la propriété clipsToBounds de vos cellules.

+0

Merci pour l'aide. La définition de la propriété clipsToBounds sur YES a résolu tout jusqu'à présent. – Lumbrjck