2015-04-21 4 views
3

Когда я открываю ViewController я могу видеть нормальный UITableView с правильным содержанием, как показано на рисунке нижесодержания UITableViewCell слияние на прокрутку

before scrolling tableview

и когда я попытался прокрутки вверх и вниз, а затем вдруг содержание слито, как это ниже образ. after scrolling tableview пожалуйста, помогите мне решить эту проблему

Мой код

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
#warning Potentially incomplete method implementation. 
    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
#warning Incomplete method implementation. 
    // Return the number of rows in the section. 
    return [[announcement valueForKey:@"title"] count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    cell.backgroundColor=[UIColor clearColor]; 
    UILabel *label = nil; 

     if (cell == nil) 
     { 
      cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cell"]; 



     } 
    label = [[UILabel alloc] initWithFrame:CGRectZero]; 
    [label setLineBreakMode:UILineBreakModeWordWrap]; 
    [label setMinimumFontSize:FONT_SIZE]; 
    [label setNumberOfLines:0]; 
    [label setFont:[UIFont systemFontOfSize:FONT_SIZE]]; 
    [label setTag:1]; 


    [[cell contentView] addSubview:label]; 



    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); 

    CGSize size = [[[announcement valueForKey:@"title"] objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 

    if (!label) 
     label = (UILabel*)[cell viewWithTag:1]; 
    label.textColor = [UIColor colorWithRed:93.0/255.0 green:93.0/255.0 blue:93.0/255.0 alpha:1.0]; 
    label.font = [UIFont fontWithName:kFontHelveticaNeueBold size:cell.textLabel.font.pointSize]; 



    label.text=[[announcement valueForKey:@"title"] objectAtIndex:indexPath.row]; 

    [label setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))]; 

    return cell; 
} 

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


      NSString *text =[[announcement valueForKey:@"title"] objectAtIndex:indexPath.row]; 

      CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); 

      CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 

      CGFloat height = MAX(size.height, 44.0f); 

      return height + (CELL_CONTENT_MARGIN * 2); 

} 

пожалуйста, помогите

+0

Проверьте эту ссылку - http://stackoverflow.com/questions/12934364/duplicating-subviewsuibutton-and-uiimageview-of-uitableviewcell-contentview-on/12970781#12970781 –

+0

ok проверка ......... –

+0

ваш собственный пост и ответ, это работает для вас? как удалить содержимое ячеек из представления? –

ответ

1

Проблема может быть из-клеточного повторного использования. Лучший способ работы с ячейками tableView - настроить ячейку. Тогда вам не нужно добавлять элементы пользовательского интерфейса в cellForRowAtIndexPath:.

Для мгновенного решения в текущем коде, удалите существующий подвид в случае многократного использования,

[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
+0

работает ваш код сейчас –

+0

coool ..... его рабочий .... thnks. если вы возьмете проекты фрилансеров PLS, дайте мне знать –

+0

В настоящее время не ... :) Можете ли вы принять мой ответ? –

1

Как вы используете многоразовые клетки, и для каждой погоды клетки это многоразовые или недавно создали вы создаете новый ярлык и добавление его поверх содержимого содержимого ячейки.

Для недавно созданной ячейки добавление ярлыка не является проблемой.

Но проблема возникает, когда ячейка повторно используется, уже содержит одну метку, и снова создается другая метка, которая предшествует предыдущей метке, и, следовательно, отвечает за перекрытие одной метки с другой.

Чтобы решить эту проблему, у вас есть два options-

1) обновить содержимое многоразовых клеток этикетки с данными метки для текущего индекса пути

2) в случае многоразового высвобождение клеток предыдущей этикетки и создать новый, инициализировать данные для текущей строки.

Использования 2-й подхода я обновил свою реализацию клеток, создавая обработчик как -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 
    cell.backgroundColor=[UIColor clearColor]; 
    UILabel *label = nil; 

     if (cell == nil) 
     { 
      cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cell"]; 
     } 

    label = [[cell contentView] viewWithTag:indexPath.row]; 
    if(label ! = nil) 
      [label removeFRomSuperView]; 

    label = [[UILabel alloc] initWithFrame:CGRectZero]; 
    [label setLineBreakMode:UILineBreakModeWordWrap]; 
    [label setMinimumFontSize:FONT_SIZE]; 
    [label setNumberOfLines:0]; 
    [label setFont:[UIFont systemFontOfSize:FONT_SIZE]]; 
    [label setTag:indexPath.row]; 

    [[cell contentView] addSubview:label]; 

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); 

    CGSize size = [[[announcement valueForKey:@"title"] objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 

    label.textColor = [UIColor colorWithRed:93.0/255.0 green:93.0/255.0 blue:93.0/255.0 alpha:1.0]; 
    label.font = [UIFont fontWithName:kFontHelveticaNeueBold size:cell.textLabel.font.pointSize]; 



    label.text=[[announcement valueForKey:@"title"] objectAtIndex:indexPath.row]; 

    [label setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))]; 

    [label release]; 

    return cell; 
} 

Вы можете использовать выше реализацию, чтобы решить проблему перекрытия из-за многократный ярлык, существующего на многоразовую клетку.

+0

получил это bhai ..проблема решена –

+0

good bro, cheers !!! –

+0

upvote для вашего ответа –

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