Comment changer la taille de popoverview lorsque sautaient contrôleurs de vue supplémentaires

StackOverflow https://stackoverflow.com/questions/8306652

Question

J'ai créé une application iPad os nus maître / détail en utilisant le modèle fourni. Il crée deux contrôleurs de vue (maître et détail). J'ai créé une vue contrôleurs de vue supplémentaires qui s'affichaient au-dessus du contrôleur de vue maître (à peu près le forage vers le bas tableviews jusqu'à ce qu'il atteigne finalement une cellule qui renseigne la vue détaillée. J'ai ajouté le code ci-dessous pour charger le contrôleur vue maître popover aux dimensions spécifiées (code ci-dessous montre également lorsqu'une sélection est choisi dans le contrôleur maître vue tableview):

@implementation MasterViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.vehicles = [[NSArray alloc] initWithObjects:@"Cars", @"Trucks", @"Boats", nil];

        self.title = @"Vehicle Type";
        self.clearsSelectionOnViewWillAppear = NO;
        self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    }
    return self;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.studySessionViewController)
    {
        self.secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    }
    [self.navigationController pushViewController:self.secondViewController animated:YES];
}

Lorsque le popover est sélectionné lorsque les premières charges de l'application, tout est grand. Cependant, quand un utilisateur clique Retour au MasterViewController, la taille de la popover est la même taille que la plus grande unité de commande d'affichage qui a été poussé sur la pile. Je l'ai cherché partout et j'ai ajouté le code suivant dans la classe de contrôleur de vue principal:

- (void)viewWillAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
    [super viewDidAppear:animated];
}

Cependant, cela n'a aucun effet. Aussi une fois que le popover est fermé (soit par rotation ou en désélectionnant le popover sur l'interface utilisateur), la taille de popover de la plus grande unité de commande de vue de la table qui a été précédemment poussé sur la pile est toujours maintenu et ignore totalement les dimensions ci-dessus. Qu'est-ce que je manque?

Était-ce utile?

La solution

Je ne pouvais pas comprendre l'ensemble de votre problème, mais je pense que la base de votre problème est mauvaise taille d'un Popover.

En général, les problèmes avec la taille Popover viennent du fait que [UIViewController contentSizeForViewInPopover] peut être réglé que avant de créer l'instance de UIPopoverController. Il est juste la valeur par défaut de la taille de popover.

Lorsque vous créez l'instance de UIPopoverController avec votre contrôleur que son contenu, le contentSizeForViewInPopover est copié dans [UIPopoverController popoverContentSize] et ne jamais lire à nouveau. Si vous modifiez sur le contenu, la taille Popover est pas mis à jour.

La seule façon que vous pouvez changer la taille d'une instance de UIPopoverController déjà créé utilise le [UIPopoverController popoverContentSize] de propriété ou méthode [UIPopoverController setPopoverContentSize:animated:].

Autres conseils

Vous essayez de définir la taille de popover dans le MasterViewController lui-même. Ici se trouve la question. Pour self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0); au travail, vous devez utiliser dans le DetailViewController à la place, puisque le DetailViewController est celui qui a un popover. L'idée de base est que vous définissez la taille dans le contrôleur de vue parent et non le contrôleur lui-même.

vous allez devoir configurer les images.

incomingCallViewController = [[IncomingCallViewController alloc]initWithNibName:@"IncomingCallViewController" bundle:nil];
            [incomingCallViewController.view setFrame:CGRectMake(400, 200, 377, 243)];

            [self.navigationController pushViewController:incomingCallViewController.view]; 

Bien sûr, cela est un exemple de code d'un de mes projets, remplacer incomingCallViewController avec votre propre classe et le déclarer dans l'en-tête

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top