我有一个包含多行的TableView。每行都有不同的Custom UITableViewCell。我需要在UIActionSheet的帮助下更改此单元格的颜色。这意味着当我选择一行时,应弹出一个Actionsheet,要求为该单元格选择特定的颜色。另一个重要的事情是,即使细胞离开屏幕,细胞仍应保留颜色。
这是我的代码。我的代码的问题是单元格没有实时更新。如果我再次选择该行,则单元格的颜色会更新。另一个问题是,如果我向下滚动单元格颜色更改为默认白色。
UIColor *cellColour;
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
switch (indexPath.row)
{
case 0:
[self displayActionSheet];
cell.backgroundColor=cellColour;
break;
case 1:
cell.backgroundColor=[UIColor yellowColor];
break;
default:
break;
}
}
-(void) displayActionSheet
{
UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle:@"Select row colour" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Red",@"Green",nil];
popupQuery.actionSheetStyle = UIActionSheetStyleDefault;
[popupQuery showInView:self.view];
[popupQuery release];
}
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch (buttonIndex)
{
case 0:
NSLog(@"Red");
cellColour=UIColor.redColor;
break;
case 1:
NSLog(@"Green");
cellColour=UIColor.greenColor;
break;
case 2:
NSLog(@"Pressed Cancel");
cellColour=nil;
break;
default:
break;
}
}
请帮忙。
答案 0 :(得分:2)
这是正常的,因为UIActionSheet
行为是异步的。
当您致电displayActionSheet
时,它会在屏幕上显示UIActionSheet
,然后继续执行代码(无需等待用户点击操作表的按钮)。然后,当用户点击操作表的某个按钮时,将调用委托方法actionSheet: clickedButtonAtIndex:
。
您需要做的是:
cellColor
属性(我希望实际上它是您班级的@property
,而不是tableView:cellForRowAtIndexPath:
中问题代码中的全局变量!方法(在此处设置cell.backgroundColor = cellColour;
),以便每次重复使用单元格并在屏幕上显示时使用颜色[tableView reloadData]
委托方法中调用actionSheet:clickedButtonAtIndex:
以重新加载tableView。