ios - 如何以编程方式增加 iPhone 中 UITableView 单元格的高度?

标签 ios objective-c iphone uitableview

我有单独的自定义 UITableViewCell 用于显示数据(这些数据来自服务器 JSON 响应)。在每个 UITableViewCell 中,我都有按钮作为阅读更多。如果用户单击阅读更多按钮我想以编程方式添加 UILabel 以显示来自服务器的其他信息。但最初我设置了 UITableViewCell 高度所以在单击阅读更多按钮后我无法看到附加信息 UILabel..

这是屏幕截图:

enter image description here

这是我需要的屏幕:

enter image description here

这是我使用的以下编码:

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

最佳答案

首先取一个bool & int变量。

BOOL isReadMoreButtonTouched = NO;
int indexOfReadMoreButton = -1;

然后用你的代码在下面实现

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    [[cell btnReadmore] setTag:[indexPath row]];

    if(isReadMoreButtonTouched && [indexPath row]== indexOfReadMoreButton)
    {
       // design your read more label here
    }
}

现在实现 IBAction

-(IBAction) funReadmore:(id)sender
{
    UIButton *readMoreButton = (UIButton *)sender;
    indexOfReadMoreButton=[readMoreButton tag];
    isReadMoreButtonTouched=YES;

    [[self tableView] beginUpdates];
    [[self tableView] reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem: indexOfReadMoreButton inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    [[self tableView] endUpdates];
}

现在来到heightForRowAtIndexPath

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(isReadMoreButtonTouched && [indexPath row]== indexOfReadMoreButton) return 200.0f;
    else return 100.0f;
}

希望它对你有用。

关于ios - 如何以编程方式增加 iPhone 中 UITableView 单元格的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21396907/

相关文章:

objective-c - 如何轮换三个广告网络 - iAd 和 Admob 以及 OAS 标签?

iphone - Iphone自定义Mapkit注释图像

ios - 发布 XMPP 框架 (iOS) 和 EJabberd 服务器

ios - SWRevealViewController 如何修复 popoViewController 的工作?

ios - 在 UitableView 中的 UitableView

objective-c - NSUserDefaults 不保存

iOS。界面 TextView 。 UIKeyboardDidHideNotification 后文本跳转

ios - 如何以编程方式打开电子邮件配置表?

iOS:用多种字体和文本样式显示长页面内容

iphone - 奇怪的情况给出错误 : "The application bundle does not contain a valid identifier."