2010-11-07 23 views
1

Je souhaite créer une «vue détaillée» dans mon application de navigation, similaire à l'application du carnet d'adresses.Créer un UIView personnalisé en tant que tableHeaderView par programmation

Je veux créer un UIView qui a un UIImageView et un UILabel que je peux passer à une propriété tableHeaderView de UITableVIew lorsqu'il est poussé par un contrôleur de navigation. Le texte et l'image de l'étiquette doivent prendre des informations du contexte de l'objet géré lors du chargement.

J'ai commencé à essayer de le faire en utilisant IB, mais j'en ai marre quand le texte de l'étiquette ne se mettait pas à jour, peu importe où je mettais le myView.UILabel.text = @"some new text". Il a simplement continué à présenter le texte que j'ai entré dans la fenêtre de l'inspecteur de l'IB. Donc, sans utiliser IB, comment créer un UIView qui a un UILabel et un UIImageView? Dois-je créer une nouvelle classe qui est une sous-classe de UIViewController ou juste UIView?

Comment créer les sous-vues pour l'étiquette et l'image?

Où l'URL du texte et de l'image doit-elle être définie dans le code? (viewDidLoad ou loadView ou viewWillLoad) (UIView, UIViewController, detailViewController)?

Répondre

1

Si vous avez commencé à utiliser IB et que le texte UILabel ne se met pas à jour, il semble que l'interface IBOutlet de votre contrôleur de vue ne soit pas correctement connectée à l'étiquette dans IB.

Espérons que cela résoudra votre problème avec IB. Et dans le code viewController, vous devez mettre à jour ce texte dans viewDidLoad.

Mais si vous voulez faire cela par programme, je voudrais faire une sous-classe de UIView (pas UIViewController).

Et je voudrais surcharger initWithFrame et faire toute la configuration là.

Quelque chose comme ce qui suit:

myView.m

@implementation myView 

@synthesize imageView, myLabel; 

- (id) initWithFrame:(CGRect) frame 
{ 
    if (self = [super initWithFrame:frame]) { 

     // Setup your image view and add it to the view. 
     self.imageView = [[[UIImageView alloc] initWithFrame:initWithFrame:frame] autorelease]; 
     self.imageView.image = ... 
     [self addSubview:self.imageView]; 

     // Setup your label 
     self.myLabel = [[[UILabel alloc] initWithFrame:frame] autorelease]; 
     self.myLabel.text = @"whatever you like"; 
     [self addSubview:self.myLabel]; 
    } 
    return self; 
} 

Assurez-vous de nettoyer correctement la mémoire dans la méthode dealloc bien sûr selon que vous aimez faire des propriétés de classe vs variables de classe.