2012-07-25 9 views
9

Ich habe gerade etwas sehr seltsam mit der UITableViewCell-Klasse auf iOS und der userInteractionEnabled-Eigenschaft bemerkt.Weird iOS Bug mit UITableViewCell und userInteractionEnabled

Es scheint, dass, wenn userInteractionEnabled auf NO vor festgelegt ist, Text dem Zellenlabel zugewiesen wird, dann wird der Text grau dargestellt. Wenn Sie jedoch userInteractionEnabled auf NO setzen nach der Text festgelegt wurde, bleibt die Textfarbe schwarz (siehe das folgende Codefragment).

- (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; 
} 

Das ist wirklich ärgerlich, weil es bedeutet, dass ich mit einem anderen Verhalten in dem Fall am Ende, die eine Zelle wiederverwendet wird. Das obige Beispiel demonstriert dies - die erste Seite der Tabelle zeigt alternative Zeilen mit grauem/schwarzem Text. Scrollen Sie weiter nach unten, damit die Zellen wiederverwendet werden und Sie sehen, dass die Dinge schief gehen.

Ich frage mich nur, ob ich etwas falsch mache, oder ob das ein iOS Bug ist? Ich sehe das Problem unter iOS 5.1 auf dem iPad 3. Jeder Einblick wirklich geschätzt!

+1

Wenn yo Sie haben einen reproduzierbaren Fehler (vor allem mit einigen Beispielcode), dann bitte melden Sie es an Apple: https://developer.apple.com/bugreporter/ –

+0

Ich berichtete dies Apple (eine ganze Weile zurück), BTW. Noch nichts gehört ... –

Antwort

1

Ich fand, dass wenn ich cell.textLabel.textColor = [UIColor blackColor]; direkt vor cell.userInteractionEnabled = NO; setze, scheint es das Problem zu beheben. Dies ist, wie es funktioniert auf iOS 6.0.1

cell.textLabel.textColor = [UIColor blackColor]; 
cell.userInteractionEnabled = NO; 
1

Ich glaube, ich eine bequemere Lösung für dieses Problem gefunden (die ich für einen Fehler sein):

Stellen Sie die enabled Eigenschaft auf textLabel und detailTextLabel manuell wie folgt aus:

cell.userInteractionEnabled = (indexPath.row % 2) == 0; 
cell.textLabel.enabled = cell.isUserInteractionEnabled; 
cell.detailTextLabel.enabled = cell.isUserInteractionEnabled; 

Dies führte mich auf die Antwort: https://stackoverflow.com/a/13327632/921573