2010-11-19 5 views
13

Je voudrais créer un nouveau clavier pour l'iPad.centrer un uipopover dans l'iPad

J'ai conçu une vue qui a les clés et tous les travaux sous-jacents pour remplir une zone de texte lorsque l'utilisateur appuie sur les touches, et transmet la valeur à la routine appelante lorsque l'utilisateur appuie sur le bouton retour.

Tout fonctionne bien.

Maintenant, je veux créer cette vue en tant que popover.

J'ai les opérations de base complète (et est pops rejeté)

Mais maintenant je besoin d'aide de réglage fin.

Voici mes questions ...

1) Comment puis-je créer une fenêtre popover centrée sur l'écran sans une sélection UIPopoverArrowDirectionAny?

2) Assurer la fenêtre popover est la taille que je l'ai créé avec dans le fichier XIB (actuellement, il redimensionne et enlève une partie de la taille extrême droite de la fenêtre)

Merci
tony

Répondre

57

Pour présenter sans flèches passer 0 pour "permittedArrowDirections":

[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES]; 

Pour centrer, passer un rect 1x1 situé au centre de la vue:

CGRect rect = CGRectMake(viewWidth/2, viewHeight/2, 1, 1); 
[popOverController presentPopoverFromRect:rect inView:view permittedArrowDirections:0 animated:YES]; 

Ensuite, vous avez un popover centré et sans flèche.

Le bit sur le retrait de la flèche pourrait se rompre à tout moment. Ils n'ont pas fourni une option UIPopoverArrowDirectionNone pour une raison, ils peuvent choisir de lancer une exception dans le futur quand 0 est passé, ou par défaut à quelque chose. Utilisez à vos risques et périls.

+0

Fonctionne pour iOS 5.x –

+2

Pour iPad en mode Paysage, j'ai dû changer la largeur et la hauteur de CGRectMake pour que les choses soient centrées correctement. – Alan

+1

Fonctionne également sous iOS 7.0.x. –

0

Si vous utilisez un UIPopoverController, il aura une flèche. Voici vos choix.

UIPopoverArrowDirectionAny 
UIPopoverArrowDirectionUp 
UIPopoverArrowDirectionDown 
UIPopoverArrowDirectionLeft 
UIPopoverArrowDirectionRight 

Comme vous pouvez le voir, il n'y a pas UIPopoverArrowDirectionNone

En ce qui concerne la taille de XIB, dans votre viewDidLoad Méthode du fichier de mise en œuvre, vous pouvez définir ce qui suit.

self.contentSizeForViewInPopover = CGSizeMake(320.0, 360.0); 

Vous pouvez définir la taille comme vous le souhaitez pour le popover.

+0

oui mais si vous codez un 0, c'est comme UIPopoverArrowDirectionNone – user2387149

0

Je viens de travailler, mais celui-ci dehors voulaient en faire autant dans le story-board possible qui change l'approche un peu:

1) Sélectionnez le popover dans le story-board et décocher les directions vers le haut/Bas/Gauche/Droite pour se débarrasser des flèches.

Pour centrer sur la préparation prioritaire de l'écran pour Segue et faire quelque chose comme ceci:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    UIStoryboardPopoverSegue* popover = (UIStoryboardPopoverSegue*)segue; 
    CGFloat horizontalInset = (self.view.frame.size.width - popover.popoverController.popoverContentSize.width)/(CGFloat)2.0; 
    CGFloat verticalInset = (self.view.frame.size.height - popover.popoverController.popoverContentSize.height)/(CGFloat)2.0; 
    popover.popoverController.popoverLayoutMargins = 
     UIEdgeInsetsMake(
      verticalInset, 
      horizontalInset, 
      verticalInset, 
      horizontalInset); 
} 

Dans mon cas, je trouve aussi que le rayon d'angle de popover Segue ne correspondait pas à ma conception si je change la couleur de fond pour effacer pour régler cela-à-dire ajouter à bloc ci-dessus:

popover.popoverController.backgroundColor = [UIColor clearColor]; 

2) Dans le contrôleur de destination pour le Segue trouver l'attribut « Popover » et cochez « utilisation explicite taille » et mettre la taille que vous voulez pour apparaître en mode popover.