私はそれを解決することができたので、私自身の質問に答えています。
まず、アルファの変更を入れてみましたcellForRowAtIndexPath
が、それもうまくいきませんでした。UITableViewCell
何度もいじくり回した後、のアルファ設定は、上書きされ続けたり、1.0に設定されたりするという点で、なんとなく特別なものであるという結論に達しました。
私は2つの修正を見つけました:
まず、で変更を行う代わりにcellForRowAtIndexPath
、UITableViewDelegate
メソッドで変更を行いwillDisplayCell
ます。何らかの理由で、このメソッドでセルのアルファを変更すると、実際には固定されます。もちろん、この方法で行う場合は、変更がセルごとに行われるようにロジックを再配置する必要があります。つまり、次のようになります。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath {
if (cell == [self otherCell]) {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"OtherCellEnabled"]) {
cell.alpha = 1.0;
cell.userInteractionEnabled = YES;
}
else {
NSLog(@"Changing alpha to 0.3");
cell.alpha = 0.3;
cell.userInteractionEnabled = NO;
}
}
}
私が言ったように、なぜこれが機能するのか正確にはわかりませんが、では機能しwillDisplayCell
ませんcellForRowAtIndexPath
。他の人も不確かなようです:
-[UITableViewDelegate willDisplayCell:forRowAtIndexPath:]とは何ですか?
UITableViewCellで問題を引き起こすアルファ色のUITableView背景
もう1つの解決策は、問題のあるアルファを使用する代わりに、同じ効果を達成する別の設定を使用することです。私の場合、それはとでしcontentView.alpha
たbackgroundColor
。何らかの理由で、これらの設定は固定され、設定することもできviewWillAppear
、期待どおりに機能します。
- (void) viewWillAppear:(BOOL)animated {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"OtherCellEnabled"]) {
[self otherCell].backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
[self otherCell].contentView.alpha = 1.0;
[self otherCell].userInteractionEnabled = YES;
}
else {
NSLog(@"Changing alpha to 0.3");
[self otherCell].backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.3];
[self otherCell].contentView.alpha = 0.3;
[self otherCell].userInteractionEnabled = NO;
}
}
2番目のアプローチの欠点は、ストーリーボードのセルの色設定を上書きしていることですが、気になる場合はストーリーボードに色を尋ねることで回避できます。
cell.alpha
なぜ違う扱いを受けるのかわかりません。多分静的セルが実装される方法について何か。