2010-04-12 4 views
1

.Hi,vue d'en-tête commune sur des fichiers nib avec Interface Builder

J'ai un fichier nib qui contient un en-tête qui sera utilisé dans la plupart de mon point de vue, pour que je puisse changer sa disposition juste une fois quand J'ai besoin. Je voudrais savoir s'il est possible d'ajouter la vue de la plume d'en-tête avec le constructeur d'interface, ou si j'ai besoin de le faire par programmation et comment cela devrait être fait.

J'ai pensé à définir la sous-classe de la sous-vue à une sous-classe UIView qui charge automatiquement le fichier nib.

- (id)initWithFrame:(CGRect)frame { 

    UIView *cell; 

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed: @"MainHeaderView" 
               owner: self 
               options: nil]; 

    for (id oneObject in nib) 
     if ([oneObject isKindOfClass: [UIView class]]) 
      cell = (UIView *) oneObject; 

    if ((self = [super initWithFrame: [cell frame]])) { 
     // Initialization code 
    } 
    return self; 
} 

Mais cela ne semble pas non plus fonctionner.

Répondre

0

Ok, j'ai résolu cela d'une autre manière.

J'ai créé headerView et le contrôleur, ainsi qu'une sous-classe de UIViewController pour toutes les vues qui nécessitaient l'affichage de l'en-tête, en les chargeant toutes avec l'en-tête. Quelque chose comme ceci:

@implementation MyDefaultViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    MyTestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    [self.view addSubview: [appDelegate.headerViewController view]]; 
} 

Chaque avis que l'en-tête a besoin d'être il y aura un contrôleur qui est une sous-classe de MyDefaultViewController. Semble fonctionner, bien que le fait que je ne précise pas où placer l'en-tête me fait peur un peu xD

0

Cela devrait fonctionner, du moins en théorie. D'ailleurs, il devrait être possible (mais avec beaucoup d'efforts) de l'ajouter via IB, depuis ce qu'on appelait autrefois une palette, il y a longtemps; Je crois que cette option a été recréée.

Je dirais que le chargement de initWithFrame: est susceptible de ne pas fonctionner. D'autres endroits possibles à charger seraient awakeFromNib (avec une mise en garde au sujet de multiples chargements de plumes qui l'appellent plusieurs fois), ou viewDidLoad. Essayez de déplacer la charge vers viewDidLoad et vérifiez si votre cell est connecté. Vous devez également tester l'échec du chargement de la pointe (retour nil).

Questions connexes