Question

Je suis un chargement tableview. Chaque cellule de mon tableview devrait avoir différentes hauteurs en fonction des données. Dans le code ci-dessous, je suis afficher les contacts dans chaque ligne de la table. Chaque contact peut avoir plusieurs numéros de téléphone. Je les contacts avec l'affichage de leurs numéros de téléphone dans chaque cellule. Ainsi, en fonction du nombre de numéros de téléphone de chaque contact, la hauteur de la cellule changera. J'ai écrit le code suivant pour afficher les contacts dans le tableau.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath
{
NSArray *contactsInSection = [sectionsArray objectAtIndex:indexPath.section];
ContactsHelper *contact = [contactsInSection objectAtIndex:indexPath.row];
static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    UIButton *checkBox = [[UIButton alloc] init];
    checkBox.tag = contact.contactID;
    [cell.contentView addSubview:checkBox];
    [checkBox setFrame:CGRectMake(6,14,20,20)];
    [checkBox release];

    UILabel *CellTextlabel = [[UILabel alloc] init];
    CellTextlabel.tag = 222;
    [CellTextlabel setFrame:CGRectMake(40, 5, 200, 20)];
    [cell.contentView addSubview:CellTextlabel];
    [CellTextlabel release];

    UILabel *detailcellTextlabel = [[UILabel alloc] init];
    detailcellTextlabel.tag = 333;
    [detailcellTextlabel setFrame:CGRectMake(40, 24, 200, 20)];
    detailcellTextlabel.font = [UIFont boldSystemFontOfSize:12];
    detailcellTextlabel.textColor = [UIColor grayColor];

    [[cell contentView] addSubview:detailcellTextlabel];
    [detailcellTextlabel release];
}
ABAddressBookRef addressbook = ABAddressBookCreate();
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressbook,contact.contactID);
UIButton *checkBox = (UIButton *)[cell.contentView viewWithTag:contact.contactID];

if(isActivDeactivButton)
{
    [checkBox setImage:[UIImage imageNamed:@"disabled_checkbox.png"] forState:UIControlStateNormal]; 
   }
else{
   [checkBox setImage:[UIImage imageNamed:@"selected_checkbox.png"] forState:UIControlStateNormal];
 }

[checkBox addTarget:self action:@selector(checkBoxSelected:) forControlEvents: UIControlEventTouchUpInside];

UILabel *editCellTextlabel = (UILabel *)[cell.contentView viewWithTag:222];
editCellTextlabel.font = [UIFont boldSystemFontOfSize:18];

UILabel *detailcellTextlabel = (UILabel *)[cell.contentView viewWithTag:333];


if (sendSMS) {
    NSMutableArray *phoneNumberEntries = [[[NSMutableArray alloc] init] autorelease];
        editCellTextlabel.text = contact.lastName;
    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
    numberOfLines = ABMultiValueGetCount(phoneNumbers);


    for (int i = 0; i < ABMultiValueGetCount(phoneNumbers)  ; i++) {
        CFStringRef phoneNoEntries = ABMultiValueCopyValueAtIndex(phoneNumbers, i);
        NSString *phoneNumber = (NSString *) phoneNoEntries;
        [phoneNumberEntries addObject:phoneNumber];  

     //   NSLog(@"email id %@", detailcellTextlabel.text);
        CFRelease(phoneNoEntries);
    }
     detailcellTextlabel.numberOfLines = ABMultiValueGetCount(phoneNumbers);
   [detailcellTextlabel setFrame:CGRectMake(40, 24, 200, 20 + 20 * [phoneNumberEntries count])];
   detailcellTextlabel.lineBreakMode = UILineBreakModeWordWrap;
    detailcellTextlabel.lineBreakMode = UILineBreakModeWordWrap;
    detailcellTextlabel.numberOfLines = numberOfLines;
    detailcellTextlabel.text = [phoneNumberEntries componentsJoinedByString:@"\n"];

   // NSLog(@"email id %@", detailcellTextlabel.text);
    CFRelease(phoneNumbers);

}
CFRelease(addressbook);
return cell;
}

Je ne peux pas trouver un moyen de régler correctement la hauteur des cellules. J'ai mis en œuvre

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

méthode déléguée et diverses logiques essayé. Mais je ne suis pas en mesure de régler la hauteur de la ligne correctement. Un problème semble être des valeurs de indexpath.section, ce qui tend à changer dans les deux méthodes de délégués. Besoin d'aide dans ce cas.

Était-ce utile?

La solution

Vous pouvez utiliser: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

et régler la hauteur de ligne en fonction de la section / ligne de la cellule.

Par exemple:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
 switch(indexPath.row){
   case:0
    return 100;
   break;

   case:1
    return 200;
   break;
  }
}

etc ....

Si vous avez plus d'1 section essayer

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

      switch(indexPath.section){
        case:0
            switch(indexPath.row){
                case:0
                    return 100;
                    break;

                case:1
                    return 200;
                    break;
            }
            break;

        case:1
            switch(indexPath.row){
                case:0
                    return 100;
                    break;

                case:1
                    return 200;
                    break;
            }

            break;
    }
}

Shani

Autres conseils

Prenez une hauteur standard de la cell.For tableview plus de cette hauteur prendre l'étiquette hieight + hauteur de la cellule tableview (votre taille standard)

Je pense que vous pouvez utiliser

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

int height = 40 //standard height 
if (tableview cell label height >40){
  height = tableview cell label height; 
 }
return height;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top