我有一个可以连接或不连接的设备的表格视图。如果连接了设备,则有一个开/关开关(在附件视图中)来控制它。如果断开连接,则用断开符号代替交换机。到现在为止还挺好。现在,我想添加一个图层,如果它被断开连接,灰显了单元格,显然如果它连接,图层就会消失。 (为了测试,我只是把它连接到一个按钮来切换状态。我已经找到了如何放置图层,但我无法删除它。点击一个 - 显示图层,点击两个 - 什么都不做,点击三层使层更暗,等等,直到它完全变黑为止。正在调用块,因为每次单击,我都会看到log语句:greyString是1"或者greyString是0。 我试过[layer setHidden:YES],[layer removeFromSuperlayer]和layer.backroughColr = clearColor,没效果
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
NamedUISwitch *mySwitch = [[NamedUISwitch alloc] initWithFrame:CGRectZero];
mySwitch.indexPath = indexPath;
mySwitch.pathRow=indexPath.row;
[mySwitch addTarget:self action:@selector(changeDeviceState:) forControlEvents:UIControlEventValueChanged];
cell.accessoryView=mySwitch;
if ([[plugStates objectAtIndex:indexPath.row] isEqualToString:@"11"]) {
cell.imageView.image=greenOn;
mySwitch.on=YES;
}else{
cell.imageView.image=greenOff;
mySwitch.on=NO;
}
cell.backgroundView =[[UIImageView alloc] init];
cell.selectedBackgroundView =[[UIImageView alloc] init];
UIImage *rowBackground;
UIImage *selectionBackground;
NSInteger sectionRows = [self.tableView numberOfRowsInSection:[indexPath section]];
NSInteger row = [indexPath row];
if (row==1) {
CALayer *mainLayer=cell.contentView.layer;
CALayer *greyOut=[CALayer layer];
CGRect frame = [tableView rectForRowAtIndexPath:indexPath];
greyOut.frame=CGRectMake(0, mainLayer.frame.origin.y, frame.size.width, frame.size.height);
CGColorRef darkColor = [[UIColor blackColor] colorWithAlphaComponent:.5f].CGColor;
CGColorRef clearColor = [UIColor clearColor].CGColor;
greyOut.backgroundColor=darkColor;
[mainLayer addSublayer:greyOut];
if ([[[self.plugStates objectAtIndex:1] substringWithRange:NSMakeRange(0, 1)] isEqualToString:@"0"]){
[greyOut setHidden:NO];
cell.accessoryView =[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"disconnect70.png"]];
NSLog(@"greyString is 0");
}else{
NSLog(@"greyString is 1");
NSLog(@"superlayer is %@",greyOut.superlayer);
greyOut.backgroundColor=clearColor;
[greyOut setHidden:YES];
//[greyOut removeFromSuperlayer];
}
}
cell.textLabel.text = deviceName;
return cell;
}
答案 0 :(得分:0)
我有一个应用程序,根据不同的情况使单元格变暗,但我所做的只是在整个单元格上放置一个空的UIView并将背景颜色设置为黑色,将灰色的状态设置为0.6,将0.0设置为明确。像魅力一样。
答案 1 :(得分:0)
我遇到了与UICollectionViewCell类似的问题,应该与使用tableviews相同。 在我的第一种方法中,我的编码与您完成的相似,没有任何反应。
我已经解决了这个问题,只是创建了一个标记的UIView,它充当了我想删除的图层的容器。它允许我迭代UICollectionview(你的TableView)中包含的所有子视图,并使用标记删除包含我想要删除的图层的UIView。
我使用的代码是:
//1.- iterate over all subview in order to delete the view tagged as 98. I do this first of all because I don't know at this point if there are any cell already placed
for (UIView *subview in [globoChat subviews]) {
if (subview.tag == 98) {
[subview removeFromSuperview];
}
}
//Create the container UIView and then tag it.
UIView *nuevaVista = [[UIView alloc]initWithFrame:globoChat.bounds];
nuevaVista.tag=98;
//create layer
CALayer *globoPorDebajo = [CALayer layer];
globoPorDebajo.frame = CGRectMake(0,0,20,20);
//add layer to the uiview that will contain it
[nuevaVista.layer addSublayer:globoPorDebajo];
//add the container view to the parent view
[globoChat addSubview:nuevaVista];
答案 2 :(得分:0)
我在视图上的自定义控件上遇到了类似的问题,该图层一直在添加。我要做的是删除图层,[greyOut removeFromSuperlayer]; 就像你在你的代码上,然后调用添加图层的视图的setNeedsLayout方法。在你的情况下,它将是[cell.contentView setNeedsLayout]