2013-04-15 7 views
7

Ich habe eine UITableView, die viele sections hat, und jeder Abschnitt hat nur 1 Zeile.So erhalten Sie den Titel der Abschnittsüberschriftenansicht, wenn Sie eine Zelle auswählen

Was ich tun möchte ist, dass, wenn ich auf eine bestimmte Zelle klicke, der Titel der Kopfzeile, die der Zelle entspricht, geändert werden sollte.

Ich habe den Abschnitt Header mit -tableView:viewForHeaderInSection:

eingestellt Wie kann ich den Zeilenkopf Titel innerhalb der -tableView:didSelectRowAtIndexPath: Methode bekommen?

+0

Es gibt mehrere Möglichkeiten, diesen Abschnittstitel zu erhalten. Wenn Sie eine Datenquelle (NSArray höchstwahrscheinlich) für die Abschnittsüberschriften verwenden, benötigen Sie nur eine Codezeile, um sie zu erhalten. Sprich nicht auf die erste Antwort, die du gelesen hast. Lesen Sie sie alle durch und stellen Sie sicher, dass Sie verstehen, was jeder tut. –

Antwort

4

Ich würde vorschlagen, sowohl tableView:titleForHeaderInSection: und tableView:viewForHeaderInSection: Implementierung (wenn beide implementiert werden dann iOS bevorzugt viewForHeaderInSection:). Dann haben Sie Ihre Implementierung von tableView:viewForHeaderInSection: schaffen seine Ansicht mit der Bezeichnung und füllen Sie es mit dem Ergebnis der tableView:titleForHeaderInSection::

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
    UIView *yourHeaderView; 
    UILabel *someLabel; 

    // set up the view + label 

    // if self doesn't implement UITableViewDelegate, you can use tableView.delegate 
    someLabel.text = [self tableView:tableView titleForHeaderInSection:section]; 

    return yourHeaderView; 
} 

Wenn Sie nun auf eine Reihe Hahn sind reagiert, ist es sehr einfach, die entsprechenden Titel zu bekommen:

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

Mein Problem gelöst Danke! – Hassy

-1

Sie können den Abschnittsindex erhalten, indem mit:

indexpath.section 

Mit dem Abschnitt Index können Sie einfach dupliziert, was Sie in -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section haben den Abschnitt Titel zu bekommen.

+0

Es gibt eine richtige Methode für das, was gefragt wurde. – Desdenova

+0

@Desdenova - Lesen Sie die Frage. Er fragte, wie man den Titel des aktuellen Abschnittsheaders in didSelectRow ... –

0

Verwenden Sie einfach die Datenquelle für die Abschnittsüberschrift. Also was auch immer NSArray Sie haben, dass die String-Werte für die, dass

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 

nur halten verwenden im DidSelectRowAtIndexPath:

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

bekommt. Es gibt eine richtige Methode für das, was gefragt wurde. – Desdenova

+1

@Desdenova - Lesen Sie die Frage.Er fragte, wie man den Titel des aktuellen Abschnitts Header in didSelectRow ... –

+0

So? Holen Sie sich die Header-Ansicht, erhalten Sie ihr Text-Label und es ist da drin. – Desdenova

6

Sie können die Kopfsicht für ausgewählte Index wie erhalten:

UIView *headerView=[deviceTable headerViewForSection:indexPath.section]; 

Holen Sie dann das untergeordnete Element aus der headerView-Schleife durch.

for(UIView *view in headerView.subviews) 
{ 
    if ([v isKindOfClass:[UILabel class]]) 
     { 
      UILabel *label=(UILabel *)v; 
      NSString *text=label.text; 
     } 
} 

Edit: Als Desdenova vorgeschlagen:

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

Keine Schleife erforderlich. 'headerViewForSection' gibt' UITableViewHeaderFooterView' zurück. Und es hat die Eigenschaft 'textLabel'. – Desdenova

+0

Er fragte nicht nach der Aussicht. Er fragte nach dem Titel im didSelectRowAtIndexPath. –

+0

Wenn meine Headeransicht eine benutzerdefinierte Ansicht ist, dann wie ich auf meine Beschriftung zugreifen kann – iDia

3

Swift Lösung:

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

Swift 4:

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 
Verwandte Themen