2012-01-13 6 views
5

У меня есть три пользовательских UILabel в UITableViewCell. Дизайн ячейки, как это,Динамично меняйте высоту UITableviewCell в iPhone?

Date(12.1.2012) Time(12.00pm) 
Cost: $20.00 
Details 

я указал высоту строки 100 в - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;. Но теперь детали несколько раз возвращают пустой (Null) с сервера. В это время мне нужно удалить ярлык Details из ячейки и изменить высоту конкретной ячейки (строки) до 70. Как я могу это сделать? Я искал свой лучший уровень в Google. Но я все еще просто смущен этим. Не могли бы вы мне помочь? Благодарю. У меня есть идея по этой ссылке - http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/. Для изменения высоты строки они использовали только одну метку. Пожалуйста, помогите мне.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 90; 
} 

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
        static NSString *CellIdentifier = @"Cell"; 

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
        if (cell == nil) 
        { 
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 


            UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)]; 
            dateLabel.tag = 100; 
            dateLabel.backgroundColor = [UIColor clearColor]; 
            dateLabel.font = [UIFont fontWithName:@"Helvetica" size:16]; 
            dateLabel.font = [UIFont boldSystemFontOfSize:16]; 
            dateLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: dateLabel]; 

      UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(120, 0, 200, 25)]; 
            timeLabel.tag = 101; 
            timeLabel.backgroundColor = [UIColor clearColor]; 
            timeLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            timeLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: timeLabel]; 

      UILabel *costLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 300, 25)]; 
            costLabel.tag = 102; 
            costLabel.backgroundColor = [UIColor clearColor]; 
            costLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            costLabel.font = [UIFont boldSystemFontOfSize:14]; 
            costLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: costLabel]; 

            UILabel *eventLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 300, 25)]; 
            eventLabel.tag = 103; 
            eventLabel.backgroundColor = [UIColor clearColor]; 
            eventLabel.font = [UIFont fontWithName:@"Helvetica" size:14]; 
            eventLabel.font = [UIFont boldSystemFontOfSize:14]; 
            eventLabel.highlightedTextColor = [UIColor whiteColor]; 
            [cell.contentView addSubview: eventLabel]; 
     } 

        UILabel *dateLabel = (UILabel *) [cell.contentView viewWithTag:100]; 
        dateLabel.text = [DateArray objectAtIndex:indexPath.row]; 

     UILabel * timeLabel = (UILabel *) [cell.contentView viewWithTag:101]; 
        timeLabel.text = [timeArray objectAtIndex:indexPath.row]; 

     UILabel * costLabel = (UILabel *) [cell.contentView viewWithTag:102]; 
        costLabel.text = [costArray objectAtIndex:indexPath.row]; 

        UILabel *eventLabel = (UILabel *) [cell.contentView viewWithTag:103]; 
     NSString *description = [eventArray objectAtIndex:indexPath.row]; 
     if([description isEqualToString:@""]) 
     { 
     eventLabel.text = @""; // Here i don't want to show this label and resize(reduce) the row height to 60; 
     } 
     else 
     { 
        eventLabel.text = description; 
     } 
        return cell; 
    } 

Как я могу это сделать? Благодарю.

ответ

8

Вернув высоту, проверьте, нет ли подробного описания. Если вернуться 60.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
NSString *description = [eventArray objectAtIndex:indexPath.row]; 
if([description isEqualToString:@""]) 
    return 60 
else 
{ 
    return 90; 
} 
} 

Кроме того, вы должны удалить ярлык с @"Details" в такой же, если заявление в cellForRowAtIndexPath:. Пометьте его заранее, определите его из подзонов и удалите из ячейки.

+0

Mr.MadhavanRP благодарит за ваш ответ. Я пробовал свой ответ в своем коде. Я также проверил условие в cellForRowAtIndexPath: также. Первый раз он работает нормально. Когда я просматриваю таблицу, размер ячейки изменился, и метка описания изменила местоположение. Это означает, что метка описания удаляется для всех строк. Не могли бы вы мне помочь. спасибо – Gopinath

+0

@Gopinath, почему бы вам не попробовать добавить метку данных в качестве подкатегории ячейки, только когда у вас есть описание. Возможно, вам понадобится создать собственный класс для решения проблемы прокрутки. см. ответ на этот вопрос http://stackoverflow.com/questions/8352530/changing-the-position-of-custom-uibutton-in-custom-uitableviewcell – MadhavanRP

0

Вы можете проверить размер возврата строки с помощью CGSize как это -

CGSize size = [detailStr sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] constrainedToSize:CGSizeMake(190, 40) lineBreakMode:UILineBreakModeWordWrap]; 

вы можете изменить ширину, высоту и шрифт в зависимости от вашего состояния. Кроме того, проверьте, если detailStr не равен нулю, прежде чем вычислять размер.

+0

Mr.Sasdnib благодарит за ваш ответ. Я отредактировал мой вопрос. Пожалуйста, проверьте это. Я просто смутил ваш ответ, можете ли вы мне помочь. Благодарю. – Gopinath

Смежные вопросы