8
votes

Comment obtenir le titre de la vue de l'en-tête de section lors de la sélection d'une cellule

J'ai un utableview qui a de nombreuses sections , et chaque section n'a qu'une ligne.

Ce que je veux faire, c'est que, lorsque je clique sur une cellule particulière, le titre de l'en-tête correspondant à la cellule doit être modifié.

J'ai défini l'en-tête de section à l'aide de -TableView: ViewForDerInSection:

Comment puis-je obtenir le titre d'en-tête de ligne à l'intérieur du -TableView: dactSelectRowatidexpath: méthode?


1 commentaires

Il existe plusieurs façons d'obtenir ce titre de section. Si vous utilisez une DataSource (Nsarray très probablement) pour les en-têtes de section, vous avez vraiment besoin d'une ligne de code pour l'obtenir. Ne sautez pas sur la première réponse que vous lisez. Lisez-les tous et assurez-vous de bien comprendre ce que chacun fait.


6 Réponses :


-1
votes

Vous pouvez obtenir l'index de la section à l'aide de: xxx

avec l'index de la section, vous pouvez simplement dupliquer ce que vous avez dans - (uIView *) TableView: (UitailView *) View de la vue Tableau de vue: (NsInteger) Section Pour obtenir le titre de section.


2 commentaires

Il y a une méthode appropriée pour ce qui a été demandé.


@Desdenova - Lisez la question. Il a demandé comment obtenir le titre de l'en-tête de section actuel de DidSelectrow ...



0
votes

Utilisez simplement la DataSource pour l'en-tête de section. Donc, quel que soit le nsarray code> que vous avez enfoncé les valeurs de chaîne du

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
...
NSString *titleForHeader = [myHeaderTitleArray objectAtIndex:indexPath.section];
}


10 commentaires

Il y a une méthode appropriée pour ce qui a été demandé.


@Desdenova - Lisez la question. Il a demandé comment obtenir le titre de l'en-tête de section actuel de DidSelectrow ...


Donc? Obtenez la vue en-tête, obtenez son étiquette de texte et il est à l'intérieur.


Pourquoi obtenir la vue? Si tout ce dont vous avez besoin est la valeur de la chaîne et vous avez besoin de cette valeur de chaîne dans le délégué DidSelectrowAindexpath, pourquoi parlons-nous de la vue de la vue?


Stupide? Non monsieur ce n'est pas. Mail Apple si vous ne l'aimez pas. Vous ne pouvez pas supposer que les titres sont dans un tableau en premier lieu.


En programmation en général et en particulier dans IOS, vous n'avez pas de choses dont vous n'avez pas besoin. Toujours prendre la route la plus courte vers ce dont vous avez besoin. Les ressources et la mémoire sont limitées et vous devez être aussi efficace que possible. Tout en obtenant la vue, puis creuser à l'intérieur de cette vue pour obtenir une étiquette, puis obtenir la propriété de texte de cette étiquette n'est pas un énorme problème de mémoire, l'idée de faire cela est fausse avec vous pouvez obtenir le même résultat en obtenant simplement la valeur de Un objet Nstring qui existe déjà dans une source de données que vous avez déjà.


S'il y a des titres dans une vue de table dynamique, il doit y avoir une source de données pour ces titres. Pas besoin de demander à Apple. J'ai passé beaucoup de temps avec les ingénieurs Apple et connaître la référence de la classe pour UitailView DataSource et délégué très bien monsieur.


@Eljay: - Selon vous, dois-je créer un tableau séparé pour le titre également?


Oui. J'aimerais. Si tout ce dont vous avez besoin est une seule étiquette, utilisez simplement cette matrice et la méthode TitleForDeRinSection pour remplir cette étiquette.


Je n'utiliserais pas le point de vue de la vue de vue (sauf s'il y a un style spécial, vous devez faire pour cette étiquette). Faites des choses la manière la plus efficace et la plus simple possible 99% du temps.



7
votes

Vous pouvez obtenir la vue en-tête pour une index sélectionnée comme: xxx pré>

puis obtenir l'enfant à partir du raseur en boucle à travers. Illique p>

    UITableViewHeaderFooterView *headerView=[deviceTable headerViewForSection:indexPath.section];
    NSString *title=headerView.textLabel.text;


11 commentaires

Pas besoin de boucle. HeardViewforsection Retours UitailViewheaderfoTerVoir . Et il a la propriété textlabel .


Il n'a pas demandé la vue. Il a demandé le titre dans le didiverectrowatudexpath.


Si mon hearview est une vue personnalisée, alors comment je peux accéder à mon texte d'étiquette


@Desdenova: Oui, vous avez raison mais vous devez faire boucle si vous avez une en-tête personnalisée.


@Eljay: Il a demandé le titre d'en-tête. Mon code quand même donnera cela.


Oui, ça va, mais il est beaucoup moins efficace que de simplement obtenir le titre de la source de données utilisée pour remplir le titre. En outre, l'OP a demandé d'obtenir cette valeur dans le dactSelectrowatudexpath. Vous répondez utilise plusieurs lignes de code et une boucle pour l'obtenir. Ma réponse utilise une ligne de code et aucune boucle.


@ SAJI723: Quels sont les éléments à l'intérieur de votre vue personnalisée?


@Eljay: Vous utilisez un tableau aussi. Si ce n'est pas un en-tête personnalisé, mon code également de deux lignes .Se ma réponse mise à jour. Quelle est la disposition dans votre cas pour un en-tête personnalisé. Vous avez probablement besoin de itérer pour cela.


L'OP n'a jamais mentionné un en-tête personnalisé.


@Eljay: Pas dans la question. Mais voir dans le commentaire ci-dessous ma réponse. Il a une étiquette personnalisée


UtableviewheaderfooTerview * casherview = [tblalbums Weavievoirection: IndexPath.section]; Nsstring * title = casherview.textlabel.text; Ici, le titre se fait nul;



4
votes

Je suggérerais de mettre en œuvre les deux TableView: TitleforDeRinSection: Code> et TableView: ViewForChotherinsection: Code> (Si les deux sont implémentés, IOS préfère VieworheadinSection: code>). ALORS avez votre implémentation de TableView: ViewOrdinatriceSection: Code> Créez sa vue avec l'étiquette et remplacez-la avec le résultat de TableView: TitleforDeRinSection: Code>:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     NSString *titleForHeader = [self tableView:tableView titleForHeaderInSection:indexPath.section];
}


1 commentaires

Résolu mon problème merci!



4
votes

Solution SWIFT:

let sectionHeaderView = table.headerViewForSection(indexPath.section)
let sectionTitle = sectionHeaderView?.textLabel?.text


0 commentaires

0
votes

SWIFT 4 STRUT>:

let indexPath = IndexPath.init(row: 0, section: 0) // put here your row or section number..
let myHeaderView = tableView.headerView(forSection:indexPath.section)
let title = myHeaderView?.textLabel?.text


0 commentaires