2010-06-07 5 views
0

J'ai besoin de créer ma propre classe UIView et ce n'est pas quelque chose que j'ai dû faire. J'ai créé la classe, puis mis en forme la petite vue dans IB (c'est juste quelques étiquettes que je devrai ajouter plus tard). mais maintenant je suis coincé sur la façon de mettre réellement une instance de celui-ci dans ma vue principale. Quelqu'un peut-il me diriger dans la direction d'un bon tutoriel? La chose la plus proche que j'ai faite à ceci est la création d'une tableViewCell personnalisée.iphone voir la classe de contrôleur - comment

DataTagViewController.m:

- (id)initWithNibNamed:(NSString *)DataTagViewController bundle:bundle { 
    if ((self = [super initWithNibName:DataTagViewController bundle: bundle])) { 
     // Custom initialization 
    } 
    return self; 
} 


MapView.m: 

    DataTagViewController *dataTag = [[DataTagViewController alloc] initWithNibNamed:@"DataTagViewController" bundle:nil]; 

    [theMap addSubView: dataTag.view]; <<< this line causes the crash (theMap is a UIView) 

Je reçois maintenant cette erreur d'exécution lors de l'ajout du sous-vue: - [UIView addSubview:]: sélecteur non reconnu envoyé à l'instance 0x470f070' 2010-06-06 21:22: 08.931

Répondre

1

UIViewController n'est pas une vue, mais contrôle une vue. Si votre classe DataTagViewController étend UIViewController, alors vous aurez envie d'ajouter sa vue, pas la classe elle-même:

[theMap addSubView:dataTag.view]; 

En outre, vous disposez d'un fichier créé DataTagViewController.xib qui a votre point de vue en elle? Si ce n'est pas le cas, vous devrez en créer un et utiliser la méthode initWithNibName:bundle de UIViewController. Sinon, vous devrez implémenter la méthode loadView à la place pour fournir votre propre affichage via le code.

Modifier

Votre fonction init utilise le nom de votre classe en tant que variable. Cela ne fonctionnera probablement pas. Utilisez le sigature par défaut:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) 
    { 
    } 
} 

Si vous ne faites rien au-delà de la fonction init, vous n'avez pas besoin de mettre en œuvre cette méthode. Votre instruction alloc/init est suffisante.

Pour un bon tutoriel, lisez le guide View Controller Programming dans les docs.

+0

Merci pour l'assistance - s'il vous plaît voir mes modifications ci-dessus – Brodie

+0

- (id) initWithNibNamed: (NSString *) bundle DataTagViewController: bundle .... vous ne voulez pas que votre nom de variable soit le même que le nom d'une classe. – typeoneerror

+0

super - j'ai créé l'objet et il n'y a pas de crash, mais le datatag n'est toujours pas visible dans la vue. – Brodie

0

Quelle est la classe parent de DataTagViewController? Vous dites que vous devez créer "ma propre classe UIView", mais votre exemple suggère que vous voulez créer une sous-classe UIViewController. initWithNibNamed: est la méthode UIViewController. Si votre parent est UIView, alors "sélecteur non reconnu" a du sens.

+0

peut-être que je fais tout faux - Tout ce que je veux vraiment, c'est pouvoir créer une vue (appelée datatag) que j'ai créé qui contient 5 uilabels dont j'ai besoin pour pouvoir modifier les données en permanence. J'ai créé une classe UIViewController appelée DataTagViewController, puis conçu le DataTagViewController.xib. – Brodie

Questions connexes