2012-02-01 11 views
26

Ho un problema con didSelectRowAtIndexPath di UITableView di IOS 5, che è corretta in ios 4.UITableView didSelectRowAtIndexPath non essendo chiamato primo rubinetto

La prima volta che toccare alcuna riga nella tabella, il metodo non fa essere chiamato Una volta che seleziono un'altra riga, chiama didSelectRowAtIndexPath, ma passa l'ultimo indexPath.

Ho già impostato tableView.delegate e può essere eseguito correttamente in ios4.

MainView.xib 
UITabBarController 
    --UINavigationController 
     --**UITableViewController** 

Qualche suggerimento?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 10; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.textLabel.text = [[NSString alloc]initWithFormat:@"%d",indexPath.row]; 
    return cell; 
} 

#pragma mark - Table view delegate 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"%d",indexPath.row); 
} 
+29

Puoi pubblicare il codice? Sei sicuro di non aver implementato didDeselectRowAtIndexPath? – Anna

+0

Non ho implementato la deselezione. Grazie. –

+0

Questo dovrebbe funzionare senza problemi. Questa classe è una sottoclasse di UITableViewController? Se è così, non è necessario impostare delegate nel metodo viewDidLoad cos è già assegnato. Altrimenti aggiungi delegato nel file di classe .h tra parentesi . –

risposta

0

Si prega di connettere il delegato da Xib ai proprietari di file. Quindi provalo funzionerà.

1

Si prega di provare a cambiare il codice -viewDidLoad nel codice sottostante (inserire l'ultima riga). Parlami dei risultati.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
    [self.tableView reloadData]; 
} 
0

Aggiungi questo codice nel tuo viewDidLoad metodo

[self.tableView reloadData] 
1

io non sono sicuro se questo è stato risposto, ma mi è stato in esecuzione con questo problema e come "Anna Karenina", ha commentato sopra. Assicurati di prestare molta attenzione ai dettagli.

Ciò è causa di voi l'attuazione del deselezionate

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 

Questo farà sì che il primo clic di non lavorare, ma seguenti clic e qualsiasi altra cella funzionerà come previsto.

Soluzione: assicuratevi di fare attenzione e utilizzare didSelectRowAtIndexPath

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

speranza che aiuta e, come ho detto prima di questo è stato risolto "Anna Karenina"

32

Potrebbe essere implementato (notare la Deseleziona): didDeselectRowAtIndexPath

... da qui il trigger sulla selezione di una nuova cella che desele cts il primo e logging indexPath come primo.

SOLUZIONE:didSelectRowAtIndexPath

sì, sembrano super-simili, e non aiuta che didDeselectRowAtIndexPath è il primo metodo di completamento automatico di Xcode seleziona la maggior parte del tempo.

DI CODICE COMPLETO:

// right 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {} 
+1

grazie! mi chiedevo perché la mia vista di avviso mostrava i dettagli dell'ultima riga selezionata! –

+0

Appena arrivato qui per un problema molto simile che stavo avendo con il mio progetto iOS8 Swift. Questo è esattamente ciò che avevo fatto. Grazie! – Jase

+0

Sarebbe di aiuto un po 'se tu ** grassetto ** Seleziona e deseleziona. Ci vuole un po 'di sguardo per vederlo. – gjpc

0

ho avuto un UIGestureRecognizer sulla vista all'interno dello storyboard. Ho dovuto rimuoverlo e ha funzionato normalmente.

0

Ho riscontrato questo problema anche quando si passavano dati a un altro VC.L'ho risolto passando a un passaggio manuale dalla tabella VC al dettaglio VC.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     selectedData = data[indexPath.row] 

     performSegue(withIdentifier: "Detail", sender: self) 
} 
+0

come dovrebbe risolverlo se viene chiamato il metodo didselect? per favore aiutami a capire di più grazie :) – ahmedHegazi

Problemi correlati