2012-09-23 12 views
6

ho voluto utilizzare un file XI ter per personalizzare una sezione Tableview in Xcode (obiettivo C), e qui ar miei file:utilizzo di un file XIB per la personalizzazione Tableview Sezione Header

SectionHeaderView.xib è un UIView con un UILabel

SectionHeaderView.m

#import "SectionHeaderView.h" 

@implementation SectionHeaderView 

@synthesize sectionHeader; 

@end 

SectionHeaderView.h

#import <UIKit/UIKit.h> 

@interface SectionHeaderView : UIView 
{ 
IBOutlet UILabel *sectionHeader; 
} 

@property (nonatomic, strong) IBOutlet UILabel *sectionHeader; 

@end 

e nel mio MasterViewController.m

#import "SectionHeaderView.h" 

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 

SectionHeaderView *header = [[[NSBundle mainBundle] loadNibNamed:@"SectionHeaderView" owner:self options:nil] objectAtIndex:0]; 

return header; 

} 

Funziona bene fino a qui, ma non appena ho impostato classe personalizzata del proprietario del file XIB per "SectionHeaderView" e collegare l'etichetta a "sectionHeader" Io otterrà l'errore "NSUnknownKeyException ". Ho voluto per collegare questi così ho potuto cambiare il Label.text dal seguente codice prima di restituire il haeder:

header.sectionHeader.text = headerText; 

Sto usando storyboard (Xcode 4.5) per il MasterViewController. apprezzerebbe tutto l'aiuto

risposta

8

Prova questo: ho provato nella mia app e il suo funzionamento:

NSArray *viewArray = [[NSBundle mainBundle] loadNibNamed:@"SectionHeaderview" owner:self options:nil]; 
UIView *view = [viewArray objectAtIndex:0]; 
UILabel *lblTitle = [view viewWithTag:101]; 
lblTitle.text = @"Text you want to set"; 
return view; 
+0

Grazie, funziona :) – Ali

2

È possibile risolvere questo problema una delle seguenti modalità:

1) Hai derivato SectionHeaderView da UIView. derivare questa classe con UIViewController invece. Questo risolverà il tuo problema.

2) Invece di utilizzare la proprietà IBOutlet, impostare Tag di UILabel in visualizzazione (ad esempio 101).

Discard Section Classe classe.

Mantieni SectionHeaderView.XIB, elimina solo i file .m e .h.

uso seguente codice ins metodo Viewforheader di classe MasterViewController:

{ 
    UIViewController *vc=[[UIViewController alloc] initWithNibName:@"SectionHeaderview" bundle:nil] 

    UILable *lblTitle =[vc.view viewWithTag:101]; 

    lblTitle.text [email protected]"Text you want to set"; 

    return vc.view; 
} 
+0

Ho provato in 2o modo e ottenere un errore: '- [UIViewCo ntroller _loadViewFromNibNamed: bundle:] ha caricato il pennino "SectionFooterView" ma il punto di vista non è stato impostato. ' – Ali

+0

prova questo: l'ho provato nella mia app e il suo funzionamento: 'code' NSArray * arrviw = [[NSBundle mainBundle] loadNibNamed: @ "SectionHeaderview" proprietario: self options: nil]; UIView * view = [arrviw objectAtIndex: 0]; Uilable * lblTitle = [view viewWithTag: 101]; lblTitle.text = @ "Testo che si desidera impostare"; vista di ritorno; – user1113101

+0

Quali sono i vantaggi nell'impostare un UIViewController come intestazione per un altro UIViewController? L'intestazione è in realtà un UIView. La domanda originale era come caricare il file pennino come intestazione. –

13

è possibile creare una sottoclasse UITableViewCell con una associato xib e usarlo come intestazione della sezione. In questo esempio lo chiamerò CustomTableViewHeaderCell .h/.m/.xib e mostrerò come modificare il testo di un'etichetta all'interno di questa cella.

  • Creare una proprietà di uscita nel vostro CustomTableViewHeaderCell.h

    @property (debole, nonatomic) IBOutlet UILabel * sectionHeaderLabel;

  • Aggiungi un UITableViewCell nel vuoto CustomTableViewHeaderCell.xib e impostare la classe dell'elemento da CustomTableViewHeaderCell dal ispettore di identità.

  • Impostare anche l'identificatore (attributo ispettore della cellula) per esempio CustomIdentifier.

  • Trascinare un'etichetta in contenuti e collegare l'uscita dalla CustomTableViewHeaderCell (non il proprietario del file!).

Poi in ogni ViewController si desidera utilizzare la visualizzazione della tabella delle cellule sezione di intestazione:

1) Pubblica il tuo XI ter del riutilizzo identificatore (probabilmente nel viewDidLoad):

[_yourTableView registerNib:[UINib nibWithNibName:@"CustomTableViewHeader" bundle:nil] forCellReuseIdentifier:@"CustomIdentifier"]; 

2) Override viewForHeaderInSection per visualizzare la vista intestazione cella personalizzata

-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ 
    CustomTableViewHeaderCell * customHeaderCell = [tableView dequeueReusableCellWithIdentifier:@"CustomIdentifier"]; 
    customHeaderCell.sectionHeaderLabel = @"What you want"; 
    return customHeaderCell; 
} 
Problemi correlati