2010-12-23 11 views
10

Der folgende Code scheint keine Auswirkung zu haben. Ich will es auf die gleiche Art und Weise highlighed werden sie hervorhebt, wenn Sie auf eine Zeile tippenSo markieren Sie eine Zeile in einem UITableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    [cell.textLabel setHighlighted:YES]; 


    return cell; 
} 
+0

Diese [post] (http://stackoverflow.com/questions/1845773/how-to-initial-select-a-row-in-uitableview) könnte helfen. – petert

Antwort

27

Diese Zeile für Sie die Zelle, Label und Zubehör Neulackierung wird handhaben:

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
1

Sie haben zwei Möglichkeiten . Entweder die Auswahl der Tabellenansicht verwenden:

[tableView selectRowAtIndexPath: indexPath animated: YES scrollPosition: UITableViewScrollPositionNone]; 

Oder die Hintergrundfarbe der Tabellenzelle in der Tabellenansicht Delegierten ändern:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    cell.backgroundColor = ... 
} 
15
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection: 0]; 

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 

funktioniert in der Regel

Wenn Sie Wenn Sie den Schnittstellen-Builder zum Erstellen Ihrer Schnittstelle verwenden, müssen Sie prüfen, ob Sie die Ansicht des Tabellenansicht-Controllers angegeben haben. Wenn Sie die Ansicht nicht tatsächlich angeben, kann diese Auswahlnachricht nirgendwo hinführen.

(Sie geben die Ansicht an, indem Sie den Tabellenansicht-Controller im Interface Builder-Inspektorfenster auswählen und den Ausgangspunkt für "Ansicht" in die Tabellenansicht ziehen, in der Sie die Auswahl vornehmen möchten).

2

können Sie

verwenden
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    [cell.textLabel setHighlighted:YES]; 


    return cell; 
} 
3
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    return YES; 
} 

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    // do something here 
} 

Try this :)

+0

Nur in iOS 6 verfügbar http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html –

21

Wie andere bereits erwähnt haben, können Sie programmatisch eine Zelle auswählen Verwendung dieser Methode:

[tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 

auch immer Sie, sollte vorsichtig sein diese Methode nicht zu früh zu nennen.

Das erste Mal, dass die Controller-Ansicht enthält die tableViewinitialized ist, die früheste, dass Sie diese Methode innerhalb viewDidAppear: nennen sollten.

Also, Sie so etwas tun sollte:

- (void)viewDidAppear:(BOOL)animated 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; // set to whatever you want to be selected first 
    [tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
} 

Wenn Sie diesen Aufruf in viewDidLoad versuchen setzen, viewWillAppear: oder andere frühe Ansicht Lifecycle Anrufe, wird es wahrscheinlich nicht funktionieren oder haben ungerade Ergebnisse (wie als Scrollen zur korrekten Position, aber nicht zum Auswählen der Zelle).

+0

Auf iOS 9 scheint von 'viewWillApear' und' viewDidAppear' zu funktionieren nicht von 'viewDidLoad'. – Adrian

Verwandte Themen