Comment augmenter par programme la hauteur de la cellule UITableView dans l'iPhone?
- Je les séparer personnalisé UITableViewCell
pour l'affichage des données(ces données sont issues de du serveur de réponse JSON).Dans chaque UITableViewCell
je vais avoir le bouton lire la suite.Si l'utilisateur clique sur lire en plus le bouton je veux ajouter par UILabel
pour afficher des informations supplémentaires à partir du serveur.Mais au départ, j'ai mis UITableViewCell
de hauteur, alors après avoir cliqué sur lire bouton plus, je ne peux pas en mesure de voir les inforamtion UILabel
..
C'est la capture d'écran:
C'est mon écran requis:
C'est le codage, j'ai utilisé:
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
int height1;
if(readMore){
height1=200;
NSLog(@"Clicked");
}
else{
height1=100;
NSLog(@"Not clicked");
}
return height1; //Normal height
}
-(NSInteger) tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
return [TitleArr count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
static NSString *simpleTableIdentifier = @"SimpleTableCell_iPad";
cell = (TableCell_Leads *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
}
else{
static NSString *simpleTableIdentifier = @"TableCell_Leads";
cell = (TableCell_Leads *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
}
if (cell == nil)
{
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell_iPad" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
else{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableCell_Leads" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
}
cell.labTitle.text = [TitleArr objectAtIndex:indexPath.row];
cell.labCategory.text=[CategoryArr objectAtIndex:indexPath.row];
[cell.btnReadmore addTarget:self
action:@selector(funReadmore:)
forControlEvents:UIControlEventTouchUpInside];
return cell;
}
- (IBAction)funReadmore:(id)sender
{
[self.tableView beginUpdates];
readMore=TRUE;
NSLog(@"READ MORE");
[self.tableView endUpdates];
}
source d'informationauteur Kalai
Vous devez vous connecter pour publier un commentaire.
Tout d'abord prendre un
bool
&int
variable.Puis de mettre en Œuvre ci-dessous avec votre code
Maintenant mettre en œuvre IBAction
En Viens maintenant à l'
heightForRowAtIndexPath
Espère que ça marchera pour vous.
Prendre un
int readMoreAtIndex;
que votre variable de classe. L'initialiser avec une valeur négative comme -1 dansinit method
et/ouviewDidLoad/viewWillAppear
. Certains de base de la logique serait comme ceci:EDIT: des Liens pour des tutos pour mettre en œuvre extensible/rétractable tableview.
J'ai trouvé une autre solution basée sur auto-dimensionnement la vue de la table de cellules. Au lieu de la mise à jour de la cellule de hauteur (codé en dur), nous pouvons mettre à jour les contraintes de priorité.
J'ai une classe personnalisée qui représentent une cellule "MyCell" qui gère le protocole et les contraintes de mises à jour:
Voici un exemple pour montrer à quoi ça ressemble:
Ma cellule personnalisé MyCell
Vous avez besoin de mettre une sorte de drapeau mécanisme et de gérer la hauteur de
Le meilleur et le moyen idéal est de calculer la hauteur d'après le texte, et ensuite de retour à la hauteur
Si vous utilisez la mise en page automatique, alors vous pouvez calculer la taille de chacune des étiquettes manuellement en fonction du contenu en utilisant
sizeToFit
méthodeJe vous suggère de suivre ces étapes:
Dans la cellule personnalisé le contenu qui sera disponible pour vous, le mettre dans un caché UIView conteneur. Donc, il n'est pas visible par défaut.
Lors de la lecture, plus on appuie sur un bouton, poignée de son événement de déclenchement à l'intérieur de la classe qui attire tableView que vous le faites
funReadmore
gestionnaire.Prendre l'index de la cellule et de la gestion ou de l'ajouter dans
NSMutableArray
objet.Recharger TableView données à l'aide de:
heightForRowAtIndexPath
fonction de délégué, de l'écrire comme ceci:À l'aide de cette façon, vous pouvez gérer plus d'une cellule avec Lire la suite enfoncé. Si dans votre exigence d'une seule cellule peut-être étendre clair votre
arrayOfExpandedCellIndexes
à l'aide de:REMARQUE: une Fois que la hauteur est ajustée pour une cellule n'oubliez pas de faire le caché de la vue visible.
Espère que cela aide!