我有一个具有标签和图像视图的自定义单元格。根据条件显示标签和图像视图。滚动uitableview时,我的自定义单元格异常起作用。在某些情况下,当我滚动一个标签和imageview时,将显示该标签和imageview,但是当我滚动回imageviews和标签时,一个标签和imageview将消失,有时它会与另一个imageview和label重叠。到目前为止,这是我尝试过的操作:
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中不起作用。自上周以来,我一直在为此苦苦挣扎。有人能帮帮我吗。
您可以尝试以下代码-
之后写下面的代码
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] ;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句