2009-08-24 5 views
17

Ich habe eine UITableView erstellt und möchte eine spezifische UITableViewCell ausgewählt erscheinen (blau), wenn die Ansicht geladen ist.Wie wähle ich eine UITableViewCell standardmäßig?

+0

Sehen Sie diese Frage unterschiedlich sein: http://stackoverflow.com/questions/19295297/uitableviewcell- set-selected-initial/25128427 # 25128427 –

Antwort

0

Verwenden Sie die UITableViewCell Methode

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

Info here.

+0

Vielleicht passt die folgende Methode besser? http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableViewCell/setHighlighted:animated: –

+0

welche Methode? der Link geht nicht zu einer bestimmten Methode – Daniel

+1

O wenn es, dass man es markiert und nicht wählt, ich denke, wenn das alles der Fragesteller will dann sicher, dass besser geeignet ist – Daniel

6

Seien Sie vernünftig mit dieser Methode, wie die Auswahl der Zeile auf diese Weise ist etwas Apple suggests against tun, um einen "ausgewählten" Zustand zu zeigen.

Erwägen Sie stattdessen, die accessoryType-Eigenschaft der Zelle auf etwas wie UITableViewCellAccessoryCheckmark zu setzen.

+0

Ich versuche, die UI Apple verwenden, wenn Sie hinzufügen/Bearbeiten Sie ein Ereignis in der Kalenderanwendung und legen Sie ein Start- und Enddatum/eine Uhrzeit fest. Ich habe Kommentare über die Häkchenregel an anderer Stelle gesehen, bin mir jedoch nicht sicher, ob dies in diesem Fall zutrifft (die Tabelle wird zum Layout von Komponenten verwendet, anstatt eine Liste von Daten zu präsentieren). – user119857

+0

Das ist ein interessanter Punkt.In diesem Fall brauchen sie keine Unteransicht für die Start- und Endpunkte, da sie beide die gleiche Art von Daten repräsentieren, die von der gleichen Art von UIPickerView modifiziert wurden. Das wäre also eine vernünftige Verwendung. Sie verwenden wahrscheinlich SELECTRowAtIndexPath von UITableView: animated: scrollPosition: method ... siehe http://tinyurl.com/yd9zs65 –

1

Auf jeden Fall aufpassen. Ich bin mir sicher, dass Sie einen guten Grund haben, aber schauen Sie sich das Dokument "Human Interface Guidelines" von Apple an. Apps werden abgelehnt, um Tabellenzeilen nicht abzuwählen. Ich würde Sie ermutigen, den passenden Abschnitt der HIG zu finden und Apple Vorschläge zu sehen.

41
-(void)viewWillAppear:(BOOL)animated { 
    // assuming you had the table view wired to IBOutlet myTableView 
    // and that you wanted to select the first item in the first section 
    [myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
          animated:NO 
         scrollPosition:UITableViewScrollPositionTop]; 
} 

Ich bin mit dieser Technik, um eine der zwei UITableViewCells so weiß der Benutzer, welche Zelle unterhalb der Tabelle ein UIDatePicker es bewirken sehen wird. Diese Technik wird von Apple in der Kalender-App verwendet, wenn Sie ein neues Ereignis erstellen und die Daten festlegen.

+1

1. das funktioniert nicht für mich. 2. Apple sagt, dass Sie ein Häkchen verwenden sollten, um den Auswahlstatus eines Elements anzugeben. –

3

Sie sollten es in viewWillAppear setzen.

[myTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] 
         animated:NO 
        scrollPosition:0]; 

Wenn Sie versuchen, es in cellForRowAtIndexPath: zu wählen, dann wird es den erforderlichen Stil nicht nehmen.

0

Manchmal, wenn Sie nicht in einer UIViewController sind, haben Sie keine viewWillAppear, und manchmal haben Sie Ihre UITableView programmgesteuert erstellt.

Die einfache Lösung ist es, diese delegate Methode zu implementieren:

- (void)tableView:(UITableView *)tableView 
     willDisplayCell:(UITableViewCell *)cell 
     forRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (self.selectedIndex == indexPath.row) { 
     cell.selected = YES; 
    } 
} 

Es ist nicht in den cellForRowAtIndexPath funktioniert, weil die Zelle noch nicht angezeigt wird. und die setSelected Methode wird nur aufgerufen, wenn diese angezeigt wird.

1

Verwenden Sie diesen Code Zelle standardmäßig in der Tabellenansicht zu wählen, können indexPath nach Ihrem Bedarf

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:0 inSection:0]; 
    [theTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom]; 
} 
Verwandte Themen