2013-09-30 49 views
0

我有一個非常奇怪的錯誤,我無法弄清楚,我現在確實需要一些幫助。基本上,tableView有三個UITableViewCell子類,它們有自己的原型單元,並出現在它們自己的部分。但是第三部分的原型也出現在第二部分中。奇怪的部分是,在將一些NSLogs放入我的代碼之後,第二節中顯示的單元格(它應該在第三節中)是UITableViewCell的正確子類,但其他原型的內容正在顯示。我不知道爲什麼會發生這種情況。我已經檢查確保原型是正確的子類,並且標識符都是正確的,並且它們是。有沒有人遇到過這個問題?對不起提前多久我cellForRowAtIndexPath:方法是:UITableView從故事板加載錯誤的原型單元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    WaveDetailCell *waveDetails; 
    ActionsCell *actions; 
    CommentCell *comments; 
    id cellToReturn; 

    if (self.hasAgrees || self.hasComments) 
    { 
     switch (indexPath.section) 
     { 
      case 0: 
      { 
       waveDetails = [tableView dequeueReusableCellWithIdentifier:WaveDetailCellIdentifier forIndexPath:indexPath]; 

       if ([waveDetails.waveLabel respondsToSelector:@selector(setAttributedText:)]) 
       { 
        NSString *name = self.currentWaveObject.wavedToUserID; 
        NSString *fullWaveString = [name stringByAppendingString:self.currentWaveObject.waveString]; 
        NSRange range = [fullWaveString rangeOfString:self.currentWaveObject.wavedToUserID]; 
        UIFont *font = [UIFont fontWithName:HelveticaMedium size:16.0f]; 
        NSDictionary *attrs = @{NSFontAttributeName: font}; 
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:fullWaveString]; 
        [attributedString addAttributes:attrs range:range]; 
        [waveDetails.waveLabel setAttributedText:attributedString]; 
       } 

       waveDetails.wavedByNameLabel.text = self.currentWaveObject.wavedByUserID; 
       waveDetails.timestampLabel.text = self.currentWaveObject.creationDate; 

       //round the corners of the imageview 
       [self setCornerRadiusForImageView:waveDetails.profilePicImageView withRadius:CGSizeMake(4.0f, 4.0f)]; 
       [self setCornerRadiusForImageView:waveDetails.waverProfileImageView withRadius:CGSizeMake(2.0f, 2.0f)]; 
       cellToReturn = waveDetails; 
      } 
       break; 

      case 1: 
      { 
       if (self.hasAgrees) 
       { 
        //create agrees cell 
       } 
       else 
       { 
        actions = [tableView dequeueReusableCellWithIdentifier:ActionsCellIdentifier forIndexPath:indexPath]; 
        cellToReturn = actions; 
       } 
      } 

      case 2: 
      { 
       if (self.hasAgrees) 
       { 
        //if there are agrees, and no comments, then the last section should be the actions cell 
        actions = [tableView dequeueReusableCellWithIdentifier:ActionsCellIdentifier forIndexPath:indexPath]; 
        cellToReturn = actions; 
       } 
       else 
       { 
        //there are comments, and no agrees 
        comments = [tableView dequeueReusableCellWithIdentifier:CommentCellIdentifier forIndexPath:indexPath]; 
        CommentObject *comment = [self.currentWaveObject.commentsArray objectAtIndex:indexPath.row]; 
        comments.userNameLabel.text = comment.commenterID; 
        comments.commentLabel.text = comment.commentText; 
        comments.timeStampLabel.text = comment.timeStamp; 
        [self setCornerRadiusForImageView:comments.userImageView withRadius:CGSizeMake(3.0f, 3.0f)]; 
        cellToReturn = comments; 
       } 
      } 

      default: 
       break; 
     } 
    } 
    else if (self.hasComments && self.hasAgrees) 
    { 
     switch (indexPath.section) 
     { 
      case 0: 
      { 
       waveDetails = (WaveDetailCell *)[tableView dequeueReusableCellWithIdentifier:WaveDetailCellIdentifier forIndexPath:indexPath]; 

       if ([waveDetails.waveLabel respondsToSelector:@selector(setAttributedText:)]) 
       { 
        NSString *name = self.currentWaveObject.wavedToUserID; 
        NSString *fullWaveString = [name stringByAppendingString:self.currentWaveObject.waveString]; 
        NSRange range = [fullWaveString rangeOfString:self.currentWaveObject.wavedToUserID]; 
        UIFont *font = [UIFont fontWithName:HelveticaMedium size:16.0f]; 
        NSDictionary *attrs = @{NSFontAttributeName: font}; 
        NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:fullWaveString]; 
        [attributedString addAttributes:attrs range:range]; 
        [waveDetails.waveLabel setAttributedText:attributedString]; 
       } 

       waveDetails.wavedByNameLabel.text = self.currentWaveObject.wavedByUserID; 
       waveDetails.timestampLabel.text = self.currentWaveObject.creationDate; 

       //round the corners of the imageview 
       [self setCornerRadiusForImageView:waveDetails.profilePicImageView withRadius:CGSizeMake(4.0f, 4.0f)]; 
       [self setCornerRadiusForImageView:waveDetails.waverProfileImageView withRadius:CGSizeMake(0.5f, 0.5f)]; 
       cellToReturn = waveDetails; 
      } 
       break; 

      case 1: 
      { 
       //create agrees cell 
      } 
       break; 

      case 2: 
      { 
       actions = (ActionsCell *)[tableView dequeueReusableCellWithIdentifier:ActionsCellIdentifier forIndexPath:indexPath]; 
       cellToReturn = actions; 
      } 
       break; 

      case 3: 
      { 
       comments = (CommentCell *)[tableView dequeueReusableCellWithIdentifier:CommentCellIdentifier forIndexPath:indexPath]; 
       CommentObject *comment = [self.currentWaveObject.commentsArray objectAtIndex:indexPath.row]; 
       comments.userNameLabel.text = comment.commenterID; 
       comments.commentLabel.text = comment.commentText; 
       comments.timeStampLabel.text = comment.timeStamp; 
       [self setCornerRadiusForImageView:comments.userImageView withRadius:CGSizeMake(2.0f, 2.0f)]; 
       cellToReturn = comments; 
      } 
       break; 

      default: 
       break; 
     } 
    } 
    else 
    { 
     if (indexPath.row == 0) 
     { 
      waveDetails = (WaveDetailCell *)[tableView dequeueReusableCellWithIdentifier:WaveDetailCellIdentifier forIndexPath:indexPath]; 

      if ([waveDetails.waveLabel respondsToSelector:@selector(setAttributedText:)]) 
      { 
       NSString *name = self.currentWaveObject.wavedToUserID; 
       NSString *fullWaveString = [name stringByAppendingString:self.currentWaveObject.waveString]; 
       NSRange range = [fullWaveString rangeOfString:self.currentWaveObject.wavedToUserID]; 
       UIFont *font = [UIFont fontWithName:HelveticaMedium size:16.0f]; 
       NSDictionary *attrs = @{NSFontAttributeName: font}; 
       NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:fullWaveString]; 
       [attributedString addAttributes:attrs range:range]; 
       [waveDetails.waveLabel setAttributedText:attributedString]; 
      } 

      waveDetails.wavedByNameLabel.text = self.currentWaveObject.wavedByUserID; 
      waveDetails.timestampLabel.text = self.currentWaveObject.creationDate; 

      //round the corners of the imageviews 
      [self setCornerRadiusForImageView:waveDetails.profilePicImageView withRadius:CGSizeMake(4.0f, 4.0f)]; 
      [self setCornerRadiusForImageView:waveDetails.waverProfileImageView withRadius:CGSizeMake(0.5f, 0.5f)]; 
      cellToReturn = waveDetails; 
     } 
     else 
     { 
      actions = (ActionsCell *)[tableView dequeueReusableCellWithIdentifier:ActionsCellIdentifier forIndexPath:indexPath]; 
      cellToReturn = actions; 
     } 
    } 
    return cellToReturn; 
} 

回答

0

等待,我想它了。這是令人尷尬的,但我在switch語句的其中一個案例中忘記了break

相關問題