iOS の UITableViewCell クラスと userInteractionEnabled プロパティで非常に奇妙なことに気付きました。
セル ラベルにテキストを割り当てる前にuserInteractionEnabled が NO に設定されている場合、テキストはグレーで表示されます。ただし、テキストが設定された後にuserInteractionEnabled を NOに設定すると、テキストの色は黒のままになります (以下のサンプル コード フラグメントを参照)。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
// swap these two lines around, and the text color does not change to grey!
cell.userInteractionEnabled = (indexPath.row % 2) == 0;
cell.textLabel.text = @"Hello";
return cell;
}
これは、セルが再利用された場合に別の動作になってしまうことを意味するため、非常に厄介です。上記の例はこれを示しています。表の最初のページには、グレー/黒のテキストが交互に表示されます。セルが再利用されるようにさらに下にスクロールすると、うまくいかないことがわかります。
私は何か間違ったことをしているのでしょうか、それともこれは iOS のバグなのでしょうか? iPad 3 の iOS 5.1 で問題が発生しました。