0

iOS 6.1 アプリケーションに従来の UITableViewController があります。テーブル ビューは静的でストーリーボードに設定されており、UITableViewCellAccessoryCheckmark を ON/OFF スイッチとして使用して構成可能な設定を表すことを意図しています。TableView には、他の設定に基づいて別のセルを無効にするセクションがあります。セルは次のコードで無効になります。

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

TableView が読み込まれると、コードは正常に動作します。

問題は、コードのアルファ設定が機能しないため、TableView が読み込まれると、無効なセル コードが正しく機能しないことです。UserInteractionEnabled プロパティは機能していますが、アルファ設定は機能していません。

これは、ビューがロードされたときに 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;
}

ここのコードはかなり単純です。セルのスーパーに問い合わせて (self は UITableViewController のサブクラスであるため、問題にはならないはずです)、セルを構成します。現在のインデックス パスのセルが別の設定に依存している場合は、そのセルを無効にします (関係のない他のコード行を削除しました)。

出力は次のとおりです。

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

したがって、出力によると、セルのアルファ プロパティが正しく設定されます。ただし、セルのアルファは設定されていませんが、userInteractionEnabled のため、セルはタップできません。

同じコードは、tableView のデリゲート didSelectRowAtIndex のセルを無効にするために機能します。

問題は、セルのアルファ値をオーバーライドできる理由とその理由です。

ありがとうございました。

4

2 に答える 2