UITableView DidSelectRowAtIndexPath?

Ik heb een tabelweergave met een paar items (alle tekst). Wanneer de gebruiker op de rij klikt, wil ik dat de tekst in die cel aan een array wordt toegevoegd.

Hoe pak ik de tekst uit de cel?

Ik heb al:

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

}

Is er een eenvoudige regel die ik kan gebruiken om de tekst uit de cel te pakken waar de gebruiker op klikt?

25

5 antwoord

Use UITableView's cellForRowAtIndexPath:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *cellText = cell.textLabel.text;
}
94
toegevoegd
Zolang de - (void) tableView: didSelectRowAtIndexPath: wordt aangeroepen als het resultaat van UI-interactie, zal deze de cel correct bevatten. Ja, je kunt en moet cellen opnieuw gebruiken, maar die verandering heeft geen invloed op deze methode.
toegevoegd de auteur Joe, de bron
+1 voor een goed antwoord
toegevoegd de auteur Rushabh, de bron
De vorige opmerking over wachtrijcellen verwart de UITableViewDataSource celForRowAtIndexPath met de methode op UITableView .
toegevoegd de auteur Wayne Burkett, de bron
Werkt nog steeds als een charme in iOS7!
toegevoegd de auteur Simo A., de bron
Nee. Veel voorbeelden verwijderen altijd een nieuwe cel in celForRowAtIndexPath en construeren deze. Dus als je het noemt, krijg je niet dezelfde cel die is geretourneerd toen het framework dit noemde om de cellen weer te geven.
toegevoegd de auteur user2451227, de bron

Het is het omgekeerde van wat je hebt gedaan in cellForRowAtIndexPath.

 [myArray addObject: [datasource objectAtIndex:indexPath.row]];
6
toegevoegd

Over het algemeen vindt u de meeste antwoorden op vragen zoals deze in de Apple-documentatie. Kijk in dit geval onder UITableView Class Reference en u ziet een sectiekop: Toegang tot cellen en secties. Dit geeft je de volgende methode:

– cellForRowAtIndexPath:

Gebruik dit nu om toegang te krijgen tot de cel en gebruik dan de tekst uit de cel (als u niet zeker weet hoe, kijk dan onder de UITableViewCell Class Reference .

Alles bij elkaar ziet uw methode er ongeveer zo uit:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSString *cellText = cell.textLabel.text;
    [myArray addObject:cellText];
}
4
toegevoegd

Mijn eerste gok zou de index zijn, [rij van indexpad]; vervolgens haalt u de gegevens uit uw gegevensbron (een array- of kerngegevens) in plaats van rechtstreeks uit de tabel zelf.

3
toegevoegd

Swift-versie:

let cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
let cellText: String = cell.textLabel.text
2
toegevoegd