2012-01-11 67 views
0

我正在加载tableview。根据数据,我的tableview的每个单元格都应该有不同的高度。在下面的代码中,我在表格的每一行中显示联系人。每个联系人可能有多个电话号码。我在每个单元格中显示他们的电话号码的联系人。因此,根据每个联系人的电话号码数量,单元格的高度会发生变化。我写了下面的代码来显示表中的联系人。在tableview中为单元格设置变量高度

- (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; 
} 

我找不到正确设置单元格高度的方法。我已经实现

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

委托方法和尝试过各种逻辑。但我无法正确设置行的高度。有一个问题似乎是indexpath.section值,这两个代理方法都会改变。在这种情况下需要帮助。

回答

3

您可以使用: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

并根据小区的部分/行设置行的高度。

例如:

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

    case:1 
    return 200; 
    break; 
    } 
} 

等....

如果您有更多然后1段试试这个

  - (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; 
    } 
} 

沙尼

+0

我有数百个联系人在我的tableview显示。切换案例是否正确? – 2012-01-11 12:37:10

+0

您不必切换。你可以用if语句检查单元格的所有其他属性。或使用范围等。 – shannoga 2012-01-11 12:44:17

0

采取的标准高度tableview cell.For超过这个高度采取标签hieight + tableview细胞高度(您的标准高度)

我认为你可以使用这个

- (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; 
} 
相关问题