2016-11-18 7 views
1

私はUITableViewに2つの異なるカスタムセルを持っています。 1つは通常のテキストメッセージを表示し、その他はテキストとイメージを表示します。私はcellForRowAtIndexPath 2つの異なるカスタムセルを使用することができ及び enter image description hereスクロール中に2つの異なるカスタムセルがオーバーラップするUITableview

以下のような二つの異なる細胞を見ることができるが、私はテーブルビューをスクロールするたびに、その後の細胞は、以下のように重なっています。

enter image description here

は、以下のデータを示すか、異なるセルを示すの私のコード

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    //minimum size of your cell, it should be single line of label if you are not clear min. then return UITableViewAutomaticDimension; 

    return UITableViewAutomaticDimension; 
} 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    id cell = [tableView cellForRowAtIndexPath:indexPath]; 
    if ([cell isKindOfClass:[TicketTableViewCell class]]) { 
     return 171; 
    } else { 
     return UITableViewAutomaticDimension; 
    } 

} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [chatHistoryArr count]; 
} 

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

    NSString *msgTypeStr = [msgTypeArr objectAtIndex:indexPath.row]; 
    if ([msgTypeStr isEqualToString:@"msg"]) { 


    static NSString *simpleTableIdentifier = @"ChatConversationTableViewCell"; 

    ChatConversationTableViewCell *cell = (ChatConversationTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 



    if (cell == nil) 
    { 



       NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ChatConversationTableViewCell" owner:self options:nil]; 
       cell = [nib objectAtIndex:0]; 

    } 

    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    cell.chatmsgLabel.text = [chatHistoryArr objectAtIndex:indexPath.row]; 
    cell.timeAndDateMsgLabel.text = [timeAndDateMsgArr objectAtIndex:indexPath.row]; 


    return cell; 
    } 

    else{ 
     static NSString *simpleTableIdentifier = @"TicketTableViewCell"; 

     TicketTableViewCell *cell = (TicketTableViewCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 


     if (cell == nil) 
     { 


        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TicketTableViewCell" owner:self options:nil]; 
        cell = [nib objectAtIndex:0]; 


     } 

     cell.selectionStyle = UITableViewCellSelectionStyleNone; 

     cell.tktMsgTxtView.text = [chatHistoryArr objectAtIndex:indexPath.row]; 

     cell.ticketDateAndTimeLbl.text =[timeAndDateMsgArr objectAtIndex:indexPath.row]; 



     return cell; 
    } 





} 

ない問題である、唯一の問題は、重複しています。私はすでに利用可能なソリューションを試したが、運がない。以下はそれらの1つです。

以下のコードをcellForRowAtIndexPathに追加しますが、使用しません。

for(UIView *view in cell.contentView.subviews){ 
     if ([view isKindOfClass:[UIView class]]) { 
      [view removeFromSuperview]; 
     } 
    } 

問題は解決しましたが運がないとたくさん試しました。どんな助けでも本当に感謝します。

答えて

1
は、それはあなたの重複の問題を解決しますtableViewCell高

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *msgTypeStr = [msgTypeArr objectAtIndex:indexPath.row]; 
    if ([msgTypeStr isEqualToString:@"msg"]) { 
     return UITableViewAutomaticDimension; 
    } else { 
     return 171; 
    } 
} 

のあなたのコードを変更

これを試してみてください。

0

は一度

NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d",indexPath.row]; 

UITableViewCell *cell=[self.tableView cellForRowAtIndexPath:indexPath]; 

if (cell == nil){ 
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
+0

これは私のためには機能しません。私はカスタムセルを使用しています。返信ありがとう – Madhu

関連する問題