2009-07-06 8 views
0

J'essaie de garder mon code propre et de réduire le nombre de fichiers. J'utilise un UITableViewController et je voudrais charger une autre vue par-dessus. Je pensais que ce serait assez simple:Plusieurs vues dans une seule plume (addSubview)

(1) créer un IBOutlet dans mon fichier .h

@interface MyViewController : UITableViewController { 
    ... 
    UIView *downloadView; 
    ... 
} 
... 
@property (nonatomic, retain) IBOutlet UIView *downloadView; 
... 

(2) lier à mon avis dans IB

(3) faire quelque chose comme :

self.view = downloadView; 

ou

[self.view addSubview:self.downloadView]; 

Mais ça ne marche pas pour moi. Si je le fais

[self.tableView removeFromSuperview]; 

Ensuite, la vue de table disparaît mais je ne sais pas comment ajouter ma vue depuis ma plume. Je fais tout pour la tableView par programmation mais je ne pensais pas que cela aurait de l'importance. Et avec UITableViewController sous-classe UIViewController je pensais que ce ne serait pas un problème d'utiliser addSubview ou quelque chose comme ça. Qu'est-ce que je rate? Cela ne devrait pas être si difficile, n'est-ce pas?

Mise à jour: Donc, si je fais ce qui suit:

UIView *newView = [[UIView alloc] initWithFrame:self.view.frame]; 
newView.backgroundColor = [UIColor greenColor]; 
[self.view addSubview:newView]; 

Il ne (surtout) ce que je veux. Est-ce que ça veut dire que je suis en train de chambouler quelque chose avec la façon dont je relie mon point de vue à IB? Dans IB, je définis la classe fileOwner sur MyViewController et je crée une connexion entre downloadView et la vue que j'ai créée (dans IB). C'est tout ce que je devrais faire correctement?

Répondre

-1

Je pense que c'est un problème d'où dans la hiérarchie vous ajoutez la vue. Vous pouvez essayer ceci:

[UIWindow addSubview:self.downloadView]; 

et de voir si elle apparaît. Ou peut-être,

[self.tableView addSubview:self.downloadView]; 

Sinon, je pense que vous avez la bonne idée.

+0

UIWindow n'aime pas addSubview: *** + [UIWindow addSubview:]: sélecteur non reconnu envoyé à la classe 0x31a5c4e0 *** en raison de l'application Mettre fin exception uncaught 'NSInvalidArgumentException', raison: « *** + [UIWindow addSubview:]: sélecteur non reconnu envoyé à la classe 0x31a5c4e0 ' Et j'ai aussi essayé la deuxième façon et cela ne fait rien. – RyanJM

+0

Désolé, le code UIWindow n'est pas littéral. Vous devez remplacer la partie UIWindow par un objet UIWindow réel. Où dans la hiérarchie d'Interface Builder est l'UIView? L'UIView est-il sous MyViewController? –

Questions connexes