2013-06-28 37 views
0

我在iOS 6.1应用程序中有一个经典的UITableViewController。表格视图是静态的,并在故事板中设置,它表示使用UITableViewCellAccessoryCheckmark作为ON/OFF开关来表示可配置的设置。 TableView中有一部分基于其他设置禁用另一个单元格。该单元格禁用以下代码:静态UITableView出现禁用不透明alpha不工作

cell.userInteractionEnabled = NO; 
cell.textLabel.backgroundColor = [UIColor clearColor]; 
cell.alpha = 0.4; 

一旦TableView被加载,代码工作正常。

问题是当TableView被加载时,被禁用的单元代码无法正常工作,因为代码中的alpha设置不起作用。 UserInteractionEnabled属性正在工作,但不是alpha设置。

这是在视图加载时应禁用UITableViewCell的代码。

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 

    if (cell) 
    { 
     ... 

     if ([[self currentSettingForIndexPath:indexPath] isEqualToString:@"myDependencySetting"]) 
     { 
      ... 
       cell.userInteractionEnabled = NO; 
       cell.textLabel.backgroundColor = [UIColor clearColor]; 
       cell.alpha = 0.4; 

       NSLog(@"Disabling cell: %0.2f", cell.alpha); 
      ... 
     } 
     else 
     { 
      cell.alpha = 1.0; 
      cell.userInteractionEnabled = YES; 
     } 
    } 

    NSLog(@"Cell alpha: %0.2f", cell.alpha); 

    return cell; 
} 

这里的代码是相当简单的,请问超级细胞(因为是自己的UITableViewController子类,它不应该是一个问题),然后配置单元。如果当前索引路径上的单元格取决于另一个设置,则禁用该单元格(我剥去了一些不相关的其他代码行)。

输出读取:

... 
Cell alpha: 1.00 
... 
Cell alpha: 1.00 
Disabling cell: 0.40 
Cell alpha: 0.40 
Cell alpha 1.00 
... 

因此根据输出单元的alpha属性设置是否正确。但单元格alpha未设置,但由于userInteractionEnabled,单元格不可打开。

相同的代码适用于禁用tableView的委托didSelectRowAtIndex中的单元格。

问题是:为什么和什么可以覆盖单元格的alpha值?

谢谢。

回答

0

我想你不能像这样直接访问单元格的alpha。试试这个

编辑:

UIColor *colorWithAlphaOfPointFour = [UIColor colorWithRed:0 green:0 blue:0 alpha:.4]; 

[[cell contentView] setBackgroundColor:[UIColor colorWithAlphaOfPointFour]]; 
[[cell backgroundView] setBackgroundColor:[UIColor colorWithAlphaOfPointFour]]; 
[cell setBackgroundColor:[UIColor colorWithAlphaOfPointFour]]; 
+0

你能解释为什么我不能像这样访问单元格的alpha?因为在tableview加载完成后它可以正常工作,而不是在cellForIndexPath函数中。然而,你所建议的工作,但它不会使单元透明,只有内容视图内的textLabel。所以这不是一个好的解决方案。 – Legoless

+0

我会认为你可以像你一样访问它,但如果它不工作,那么这将是下一个猜测。可能有一个cell.background或者你可以访问的东西。否则,它会出现一些奇怪的问题,如何将单元出列并重用它们 – Ben

+0

如果这是出列单元和重复使用单元的问题,则应该注意为每个单元设置α。但事实并非如此。我不认为有很多静态表视图出列。 – Legoless

1

所以我知道这两年下来的道路,但我设法解决一点与你完全相同的问题和整个这个问题绊倒了。我碰巧使用的是iOS 8,但问题似乎相同:我有一个静态表视图,其中有一些单元格的alpha,我想在初始表格视图设置上进行调整。在cellForRowAtIndexPath中进行这些调整不起作用。调整后的每个单元格都显示在屏幕上,alpha值为1.0,但我在cellForRowAtIndexPath中将其alpha值记录为0。

因为我感兴趣的是调整单节的所有细胞,我能够通过包括沿着这些路线在viewWillAppear东西以获得所需的功能:

- (void)changeAlphaOfCells:(float)alpha 
{ 
    for (int i = 0; i < NUMBER_OF_ROWS_IN_SECTION; i++) 
    { 
     UITableViewCell *cell = [[self tableView] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:SECTION_NUMBER]]; 
     cell.alpha = alpha; 
    } 
} 

你需要逻辑来确定哪些细胞调整viewWillAppear中的阿尔法值,并用cellForRowAtIndexPath.检索它们。不像cellForRowAtIndexPath中的单个线路调用那样优雅,但也不算太差。