2013-10-10 14 views
31

Hallo dort habe ich Situation wo in einer iPad App meine master controller Liste hat und Details Controller haben seine Details, eine typische UISplitViewController Muster. Was ich erreichen möchte, ist, meine erste Zeile sollte zunächst ausgewählt werden und später möchte ich dem Benutzer eine Auswahlmöglichkeit geben. Ich verwende die setSelected und didSelectRowAtIndexPath Methode der Zelle, die Auswahl wie folgt entfernt.UITableViewCell Set anfänglich ausgewählt

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
    NSIndexPath* path = [NSIndexPath indexPathForRow:0 inSection:0]; 
    UITableViewCell* cell = [tableView cellForRowAtIndexPath:path]; 
    [cell setSelected:NO]; 
} 

für die erste Zelle, aber meine keine Zelle wird nach diesen ausgewählt zu werden mir bitte helfen.

+0

Sind Sie Ihren langweiligen Tableview die erste Zeile automatisch wählen? – wesley

Antwort

41

versuchen, diesen

NSIndexPath* selectedCellIndexPath= [NSIndexPath indexPathForRow:0 inSection:0]; 
[self tableView:tableViewList didSelectRowAtIndexPath:selectedCellIndexPath]; 
[tableViewList selectRowAtIndexPath:selectedCellIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; 

ODER

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (/* should be selected */) { 
    [cell setSelected:YES animated:NO]; 
} 
} 
8

Ich weiß nicht, dass Sie diese Antwort erwarten. Standardmäßig, wenn Sie erste Zeile in der Tableview mit aus manueller Auswahl auswählen mögen, initiieren nur die didSelectRowAtIndexPath Verfahren wie diese

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

Für die Zelle, um ausgewählt zu werden, müssen Sie -setSelected:animated: von innerhalb -tableView:willDisplayCell:forRowAtIndexPath: so anrufen:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (/* should be selected */) { 
     [cell setSelected:YES animated:NO]; 
    } 
} 

Aufruf von -setSelected von woanders hat keine Wirkung.

+15

Dies sollte die akzeptierte Antwort sein. – RaffAl

+19

Diese Antwort wird großartig sein, wenn Sie die folgende Zeile hinzufügen könnten: [tableView selectRowAtIndexPath: indexPath animiert: NO scrollPosition: UITableViewScrollPositionNone]; Dies ermöglicht dem Benutzer, die Zelle abzuwählen. Wenn diese Zeile fehlt, kann die Zeile nicht abgewählt werden. – cateof

+3

Aber wenn Sie verwenden möchten [TableView selectRowAtIndexPath: indexPath animiert: NO scrollPosition: UITableViewScrollPositionNone]; Sie müssen es in [tableView: cellForRowAtIndexPath:] einfügen, da es in [tableView: weillDisplayCell:] nicht funktioniert. –

5

Es wird auch im Fall von POP Navigation helfen

.h-Datei,

NSIndexPath *defaultSelectedCell 

.m Datei

diesen Code Setzen Sie in ViewDidLoad

defaultSelectedCell= [NSIndexPath indexPathForRow:0 inSection:0]; 

in viewDidAppear

[self.tableView selectRowAtIndexPath:defaultSelectedCell animated:NO scrollPosition:UITableViewScrollPositionNone]; 

Dies wird helfen, wenn Sie POP, Setzen Sie diesen Code in viewWillAppear

[self.catTableView selectRowAtIndexPath:defaultSelectedCell animated:NO scrollPosition:UITableViewScrollPositionNone]; 

in tableView didSelectRowAtIndexPath Methode,

defaultSelectedCell = [NSIndexPath indexPathForRow:indexPath.row inSection:0]; 

Das hilft mir perfekt entweder ersten Mal Laden oder Pop Navigation.

19

Swift 3: Auswahlzelle zunächst

import UIKit 

class MyViewController: UIViewController, UITableViewDelegate { 
    @IBOutlet weak var tableView: UITableView! 
    ... 

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 

     if /* your code here */ == indexPath.row { 
      tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none) 
     } 
    } 

    ... 
} 
+2

Dies sollte die ausgewählte Antwort sein, da die Auswahl beibehalten wird, wenn eine andere Zeile ausgewählt wird. Vielleicht fügen Sie ein Häkchen in die if-Anweisung ein, um sicherzustellen, dass nur die Zeile ausgewählt wird, wenn sie nicht aktuell ist; y hat tho ausgewählt. –

+1

Ich stimme Douglas zu. Dies sollte als richtige Antwort markiert werden. Ich habe in den letzten paar Stunden nach einer Lösung gesucht und das löst mein Problem. – user30646

+0

@ user30646 gleich hier! .. das sollte die richtige Antwort sein, da es mir geholfen hat, mein Problem auch zu lösen! – Pangu

Verwandte Themen