74 votes

Comment ajouter un UIViewController d'affichage en tant que sous-vue

Note pour les googlers, ce Q-A est maintenant cinq ans de la date!

Comme Micky ci-dessous et d'autres mentionnent, maintenant cela est fait sur une base quotidienne avec des Conteneurs dans iOS.


J'ai un ViewController qui contrôle la plupart des sous-vues. Lorsque je clique sur un des boutons j'initialise un autre viewcontroller et de montrer qu'il est d'avis que la sous-vue de ce point de vue. Toutefois, la sous-vue dépasse les limites de l'image pour la sous-vue et enfait remplit l'écran entier.

Quel peut être le problème? Je présume que le problème est que UIViewController a un cadre (0,0,320,460) et donc remplit la totalité de l'écran (même si c'recevoir tactile d'événements lors d'un contact au sein de la sous-vue cadre de limites). Comment puis-je redimensionner l'image pour l'adapter en tant que sous-vue.

En bref, j'ai besoin de l'aide de l'ajout d'un viewcontroller est vue comme une sous-vue à l'autre viewcontroller.

Merci!

87voto

Micky Duncan Points 1000

Comme d'iOS 5, Apple vous permet désormais de faire des conteneurs personnalisés dans le but de l'ajout d'un UIViewController à l'autre UIViewController en particulier par l'intermédiaire des méthodes telles que addChildViewController de sorte qu'il est tout à fait possible d'imbriquer des UIViewControllers

41voto

Naloiko Eugene Points 219

Grâce à ce gars, je l'ai fait http://highoncoding.com/Articles/848_Creating_iPad_Dashboard_Using_UIViewController_Containment.aspx

Ajouter UIView, de le relier à en-tête:

@property (weak, nonatomic) IBOutlet UIView *addViewToAddPlot;

- (Void)viewDidLoad ce faire:

ViewControllerToAdd *nonSystemsController = [[ViewControllerToAdd alloc] initWithNibName:@"ViewControllerToAdd" bundle:nil];
    nonSystemsController.view.frame = self.addViewToAddPlot.bounds;
    [self.addViewToAddPlot addSubview:nonSystemsController.view];
    [nonSystemsController didMoveToParentViewController:self];
    [self addChildViewController:nonSystemsController];

Profitez de

26voto

Steven Fisher Points 22249

Voir aussi Micky Duncan réponse ci-dessous, qui couvre des conteneurs personnalisés, de nouveau dans iOS 5.

Ne faites pas cela! L'intention de l' UIViewController est de conduire la totalité de l'écran. Il n'est tout simplement pas approprié pour cela, et il n'a pas vraiment d'ajouter quoi que ce soit dont vous avez besoin.

Tous vous avez besoin est un objet qui est propriétaire de votre affichage personnalisé. Il suffit d'utiliser une sous-classe de la UIView lui-même, de sorte qu'il peut être ajouté à la fenêtre de votre hiérarchie et de la gestion de la mémoire est entièrement automatique.

Point de la sous-vue PLUME du propriétaire d'une sous-classe personnalisée d' UIView. Ajouter un contentView prise à la présente sous-classe personnalisée, et point à la vue dans la plume. Dans la sous-classe personnalisée faire quelque chose comme ceci:

- (id)initWithFrame: (CGRect)inFrame;
{
    if ( (self = [super initWithFrame: inFrame]) ) {
        [[NSBundle mainBundle] loadNibNamed: @"NibNameHere"
                                      owner: self
                                    options: nil];
        contentView.size = inFrame.size;
        // do extra loading here
        [self addSubview: contentView];
    }
    return self;
}

- (void)dealloc;
{
    self.contentView = nil;
    // additional release here
    [super dealloc];
}

(Je suppose ici que vous utilisez initWithFrame: à la construction de la sous-vue.)

18voto

Logan Points 7458

Je sens que toutes ces réponses sont légèrement incomplète, donc, ici, est la bonne façon d'ajouter un viewController est vue comme une sous-vue de l'autre viewController:

    [viewControllerToAdd willMoveToParentViewController:self];
    [self.view addSubview:viewControllerToAdd.view];
    [self addChildViewController:viewControllerToAdd];
    [viewControllerToAdd didMoveToParentViewController:self];

Si vous le souhaitez, vous pouvez copier dans votre code comme un fragment de code. DONC, ne semble pas comprendre le code de remplacement, mise en forme, mais ils apparaîtront propre dans Xcode:

    [<#viewControllerToAdd#> willMoveToParentViewController:self];
    [self.view addSubview:<#viewControllerToAdd#>.view];
    [self addChildViewController:<#viewControllerToAdd#>];
    [<#viewControllerToAdd#> didMoveToParentViewController:self];

6voto

rahul gupta Points 338

Utilisation:

[self.view addSubview:obj.view];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X