2015-05-26 16 views
0

我有一個具有標籤和圖像視圖的自定義單元格。標籤和圖像視圖根據條件顯示。當uitableview滾動時,我的自定義單元格很奇怪。有一個例子,當我滾動一個標籤和imageview的標籤和圖像視圖顯示,但當我滾動回圖像和標籤一個標籤和imageview將消失,有時它重疊另一個imageview和標籤。這是我到目前爲止所嘗試的:標籤和Imageviews奇怪的行爲在iOS7的自定義單元中

static NSString *simpleTableIdentifier = @"JobDetailCell"; 
MTJobDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath]; 

if (cell == nil) { 
    cell = [[MTJobDetailCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:simpleTableIdentifier]; 
} 

我仍然得到相同的結果。我讀了另一個解決方案,並將我的計算移動到了我的customcell.m文件中。這是在layoutSubviews方法。

NSInteger tempCount = [[NSUserDefaults standardUserDefaults] integerForKey:@"BenefitsCounter"]; 
NSDictionary *tempDictionary = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"IncentivesAndBenefits"]]; 
//TEST 
NSLog(@"TEMP INT:%ld", (long)tempCount); 
NSLog(@"TEMP ARRAY:%@", tempDictionary); 

BOOL iFood = tempDictionary[@"food"][@"1"]; 
NSString* iFoodDescription = tempDictionary[@"food"][@"1"]; 
BOOL iCommission = tempDictionary[@"commission"][@"1"]; 
NSString* iCommissionDescription = tempDictionary[@"commission"][@"1"]; 
BOOL iUniform = tempDictionary[@"uniform"][@"1"]; 
NSString* iUniformDescription = tempDictionary[@"uniform"][@"1"]; 
BOOL iTransport = tempDictionary[@"transport"][@"1"]; 
NSString* iTransportDescription = tempDictionary[@"transport"][@"1"]; 
BOOL iExtras = tempDictionary[@"extras"][@"1"]; 
NSString* iExtrasDescription = tempDictionary[@"extras"][@"1"]; 

//MARK: POSITION labels and imageviews 
int img_x = kImgStart_x; 
int img_w = kImgStart_w; 
int img_h = kImgStart_h; 

//result value positions 
int lbl_x = kLblStart_x; 
int lbl_y = kLblStart_y; 
int lbl_w = kLblStart_w; 

if(tempCount == 1) 
{ 
    if(iCommission) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iCommissionDescription]; 

     self.imgCommissionIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgCommissionIncentive.image = [UIImage imageNamed:@"icon-commission.png"]; 
     self.lblCommissionIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 
    } 

    if(iExtras) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iExtrasDescription]; 

     self.imgExtrasIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgExtrasIncentive.image = [UIImage imageNamed:@"icon-extras.png"]; 
     self.lblExtrasIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 
    } 

    if(iFood) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iFoodDescription]; 

     self.imgFoodIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgFoodIncentive.image = [UIImage imageNamed:@"icon-food.png"]; 
     self.lblFoodIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 
    } 

    if(iTransport) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iTransportDescription]; 

     self.imgTransportIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgTransportIncentive.image = [UIImage imageNamed:@"icon-transport.png"]; 
     self.lblTransportIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 
    } 

    if(iUniform) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iUniformDescription]; 

     self.imgUniformIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgUniformIncentive.image = [UIImage imageNamed:@"icon-uniform2.png"]; 
     self.lblUniformIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 
    } 
} 
else if (tempCount > 1) 
{ 
    if(iCommission) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iCommissionDescription]; 

     self.imgCommissionIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgCommissionIncentive.image = [UIImage imageNamed:@"icon-commission.png"]; 
     self.imgCommissionIncentive.contentMode = UIViewContentModeScaleAspectFit; 
     self.lblCommissionIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 

     lbl_y += kResult_Y_incr; 
    } 

    if(iExtras) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iExtrasDescription]; 

     self.imgExtrasIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgExtrasIncentive.image = [UIImage imageNamed:@"icon-extras.png"]; 
     self.imgExtrasIncentive.contentMode = UIViewContentModeScaleAspectFit; 
     self.lblExtrasIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 

     lbl_y += kResult_Y_incr; 
    } 

    if(iFood) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iFoodDescription]; 

     self.imgFoodIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgFoodIncentive.image = [UIImage imageNamed:@"icon-food.png"]; 
     self.imgFoodIncentive.contentMode = UIViewContentModeScaleAspectFit; 
     self.lblFoodIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 

     lbl_y += kResult_Y_incr; 
    } 

    if(iTransport) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iTransportDescription]; 

     self.imgTransportIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgTransportIncentive.image = [UIImage imageNamed:@"icon-transport.png"]; 
     self.imgTransportIncentive.contentMode = UIViewContentModeScaleAspectFit; 
     self.lblTransportIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 

     lbl_y += kResult_Y_incr; 
    } 

    if(iUniform) 
    { 
     //decrement 
     tempCount--; 
     CGSize expectedSize =[self GetTextHightForLable:iUniformDescription]; 

     self.imgUniformIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h); 
     self.imgUniformIncentive.image = [UIImage imageNamed:@"icon-uniform2.png"]; 
     self.imgUniformIncentive.contentMode = UIViewContentModeScaleAspectFit; 
     self.lblUniformIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10); 

     lbl_y += kResult_Y_incr; 
    } 
} 

這是我的cellForRowAtIndexPath代碼:

NSString *strIncentives = [[self.jobDetailDict objectForKey:@"sub_slots"] objectForKey:@"incentives_and_benefits"]; 
    if(![strIncentives length] == 0) 
    { 
     NSData *jsonData = [strIncentives dataUsingEncoding:NSUTF8StringEncoding]; 
     NSError *error; 
     iBenefitsCounter = 0; 

     incentives = [NSJSONSerialization 
         JSONObjectWithData:jsonData 
         options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves 
         error:&error]; 

     //TEST 
     //NSLog(@"INCETIVES DICT: %@", incentives); 

     //BOOL iCommission = incentives[@"commission"][@"1"]; 
     NSString *iCommissionDescription = incentives[@"commission"][@"1"]; 
     if([iCommissionDescription isEqualToString:@""] || incentives[@"commission"][@"0"]) 
     { 
      [cell.imgCommissionIncentive setHidden:true]; 
      [cell.lblCommissionIncentive setHidden:true]; 
     } 
     else 
     { 
      [cell.imgCommissionIncentive setHidden:false]; 
      cell.imgCommissionIncentive.image = [UIImage imageNamed:@"icon-commission.png"]; 

      [cell.lblCommissionIncentive setHidden:false]; 
      [cell.lblCommissionIncentive setText:iCommissionDescription]; 
      cell.lblCommissionIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f]; 
      iBenefitsCounter++; 
     } 

     //BOOL iExtras = incentives[@"extras"][@"1"]; 
     NSString *iExtrasDescription = incentives[@"extras"][@"1"]; 
     if([iExtrasDescription isEqualToString:@""] || incentives[@"extras"][@"0"]) 
     { 
      [cell.imgExtrasIncentive setHidden:true]; 
      [cell.lblExtrasIncentive setHidden:true]; 
     } 
     else 
     { 
      [cell.imgExtrasIncentive setHidden:false]; 
      cell.imgExtrasIncentive.image = [UIImage imageNamed:@"icon-extras.png"]; 

      [cell.lblExtrasIncentive setHidden:false]; 
      [cell.lblExtrasIncentive setText:iExtrasDescription]; 
      cell.lblExtrasIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f]; 
      iBenefitsCounter++; 
     } 

     //BOOL iFood = incentives[@"food"][@"1"]; 
     NSString *iFoodDescription = incentives[@"food"][@"1"]; 
     if([iFoodDescription isEqualToString:@""] || incentives[@"food"][@"0"]) 
     { 
      [cell.imgFoodIncentive setHidden:true]; 
      [cell.lblFoodIncentive setHidden:true]; 
     } 
     else 
     { 
      [cell.imgFoodIncentive setHidden:false]; 
      cell.imgFoodIncentive.image = [UIImage imageNamed:@"icon-food.png"]; 

      [cell.lblFoodIncentive setHidden:false]; 
      [cell.lblFoodIncentive setText:iFoodDescription]; 
      cell.lblFoodIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f]; 
      iBenefitsCounter++; 
     } 

     //BOOL iTransport = incentives[@"transport"][@"1"]; 
     NSString *iTransportDescription = incentives[@"transport"][@"1"]; 
     if([iTransportDescription isEqualToString:@""] || incentives[@"transport"][@"0"]) 
     { 
      [cell.imgUniformIncentive setHidden:true]; 
      [cell.lblUniformIncentive setHidden:true]; 
     } 
     else 
     { 
      [cell.imgTransportIncentive setHidden:false]; 
      cell.imgTransportIncentive.image = [UIImage imageNamed:@"icon-transport.png"]; 

      [cell.lblUniformIncentive setHidden:false]; 
      [cell.lblTransportIncentive setText:iTransportDescription]; 
      cell.lblUniformIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f]; 
      iBenefitsCounter++; 
     } 

     //BOOL iUniform = incentives[@"uniform"][@"1"]; 
     NSString *iUniformDescription = incentives[@"uniform"][@"1"]; 
     if([iUniformDescription isEqualToString:@""] || incentives[@"uniform"][@"0"]) 
     { 
      [cell.imgUniformIncentive setHidden:true]; 
      [cell.lblUniformIncentive setHidden:true]; 

     } 
     else 
     { 
      [cell.imgUniformIncentive setHidden:false]; 
      cell.imgUniformIncentive.image = [UIImage imageNamed:@"icon-uniform2.png"]; 

      [cell.lblUniformIncentive setHidden:false]; 
      [cell.lblUniformIncentive setText:iUniformDescription]; 
      cell.lblUniformIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f]; 
      iBenefitsCounter++; 
     } 

     [[NSUserDefaults standardUserDefaults] setInteger:iBenefitsCounter forKey:@"BenefitsCounter"]; 
     [[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver archivedDataWithRootObject:incentives] forKey:@"IncentivesAndBenefits"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 

     return cell; 
    } 

我的代碼完全在iOS版8.我真的困惑,爲什麼它不能在iOS的7工作,我一直在這個掙扎自去年周。 有人可以幫我。

回答

1

,你可以嘗試下面的代碼 -

下面寫代碼後

if (cell == nil) { 
    cell = [[MTJobDetailCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:simpleTableIdentifier]; 
} 

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

cell.clipsToBounds = YES; 

添加所有的UILabel和的UIImage如下

[cell.contentView addSubview:myLabel] ; 
+0

嘿感謝您的答覆..但我應該在哪裏[cell.contentView addSubview:myLabel];我只是試過這個解決方案,它現在不顯示任何東西.. –

+0

檢查你的customcell.m你添加self.lblCommissionIncentive或以其他方式發佈完整customcell.m,我會告訴你確切的地方需要添加。 –

+0

標籤和imageviews不是以編程方式創建的。這就是我所做的,我刪除了(UIView *在cell.contentView.subviews中查看){...}並且標籤和圖像視圖再次顯示.. –