2010-08-03 26 views
46

¿Es posible presentar un popover sin ningún tipo de flechas apuntando a alguna parte?UIPopover sin flechas

+1

Así que quieres un controlador de vista modal? – kennytm

+2

¿Está sugiriendo que use '-presentModalViewController: animated:'? Eso es extremadamente diferente de un UIPopover. No proporciona la misma apariencia que UIPopover, y está limitado a ciertas dimensiones fijas. –

Respuesta

92

Si es posible simplemente hacer:

[self.popoverController presentPopoverFromBarButtonItem:anItem 
           permittedArrowDirections:0 
               animated:YES]; 

El cero representa ninguna dirección.

+0

me funciona! gracias ... ¿Apple lo aceptará? ... por cierto, ¿es posible presentar un teclado dentro de un popover, como se ve en el código de acceso de ipad? http://stackoverflow.com/questions/3636560/how-to-present-keyboard-inside-popover-ipad-passcode-lock-style – Omer

+2

Sí Apple lo ha aceptado – Matt

+3

Esto ya no funciona en iOS 6.0 – buildsucceeded

2

No, no existe la opción UIPopoverArrowDirectionNone, y UIPopoverArrowDirectionUnknown arroja una excepción, creo que si intenta usar eso para presentar.

En lugar de un controlador de popover, puede llamar al presentModalViewController:animated: y configurar el controlador que está presentando para tener un estilo de presentación modal de UIModalPresentationFormSheet o quizás UIModalPresentationPageSheet. Esas son pantallas emergentes más tradicionales que los popovers.

+2

Desafortunadamente, presentModalViewController está limitado a ciertos tamaños de fotogramas particulares, mientras que los popovers no lo son, a menos que me falta algo. Tampoco brindan la misma apariencia que un popover. –

+0

Eso es correcto. Lamentablemente, si sus requisitos son estrictos, es posible que deba desplegar sus propias ventanas emergentes para obtener lo que desea. – Kevlar

4

Prueba esto, funciona para mí.

[self.popoverViewController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:0 animated:YES]; 
8

Establecer la permittedArrowDirections a 0.

permittedArrowDirections:0 

Código -

[self.popoverController presentPopoverFromBarButtonItem:anItem 
           permittedArrowDirections:0 
               animated:YES]; 

Cero dice "NoDirection".

+0

También puede hacerlo en el guion gráfico anulando la selección de todas las casillas de dirección de la flecha. – Echelon

1

prueba este

[popOverController presentPopoverFromRect:CGRectMake(0, 0, 30, 40) inView:popOverContentView permittedArrowDirections:0 animated:NO]; 
3

Esto funciona muy bien para mí.

[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20) 
            inView:self.view 
        permittedArrowDirections:NULL 
            animated:YES]; 

Enjoy Coding.

1

Uso Popover para mostrar el menú dependiendo de la coordenada táctil. En este caso popover utiliza una altura máxima de self.view

CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0); 
[self.popover presentPopoverFromRect:popeverFrame 
           inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionAny 
          animated:YES]; 

pero cuando se utiliza 0-dirección. El rectángulo de Popover no establece su altura al máximo y solo puede establecerse mediante la propiedad apropiada.

CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0); 
[self.popover presentPopoverFromRect:popeverFrame 
           inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionAny 
          animated:YES]; 

Esperamos que esto ayude: Help with UIPopOverController size

1

No utilice de Popovers si no desea mostrar flechas. Presente su controlador de vista como un modal y use un UIModalPresentationFormSheet en su lugar.

Ejemplo:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MyStoryBoard" bundle:nil]; 
UIViewController* viewController = [sb instantiateViewControllerWithIdentifier:@"myViewController"]; 
viewController.modalPresentationStyle = UIModalPresentationFormSheet; 
[presenterViewController presentViewController: viewController animated:YES completion:^{ 

}]; 
-2

Una solución simple en SWIFT:

popover!.permittedArrowDirections = nil 
+0

Dice como error: nil no se puede asignar al tipo –

19

para el iPhone y rápida 2.0 prueba este

Código para iniciar popover

initiatePopover(){ 
    let popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("XYZController") as! XYZController 
    let nav = UINavigationController(rootViewController: popoverContent) 
    nav.modalPresentationStyle = UIModalPresentationStyle.Popover 
    let popover = nav.popoverPresentationController 
    popoverContent.preferredContentSize = CGSizeMake(250 ,200) 
    popover!.delegate = self 
    popover!.sourceView = self.view 
    popover!.sourceRect = CGRectMake(200,200,0,0) 
    popover!.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) 
    self.presentViewController(nav, animated: true, completion: nil) 
} 

y añadir a su ViewController

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { 
    return UIModalPresentationStyle.None 
} 
4

Para Swift 2.0 y iOS9 la solución es:

popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection() 
+0

El valor del tipo 'UIPopoverController' no tiene ningún miembro 'allowedArrowDirections' – SpyZip

+0

@SpyZip Esto funciona. Quizás olvidaste el signo de interrogación. –

2

En mi caso para el desarrollo rápido Ircops

popoverController.sourceView = self.view 
popoverController.sourceRect = self.view.bounds 
popoverController.backgroundColor = UIColor.brownColor() 

popoverController.permittedArrowDirections = UIPopoverArrowDirection.init(rawValue: 0) 
popoverController.sourceRect = CGRectMake(width/4, hieght/4, width/2, hieght/2); 
0

Para realizar una emergente sobre la dirección ninguno y crea que aparezca en el centro del controlador de vista:

let PopSrnVar = popoverPresentationController 
let ConRctVar = view.frame 
PopSrnVar!.sourceRect = CGRectMake(ConRctVar.width/4, ConRctVar.height/4, ConRctVar.width/2, ConRctVar.height/2) 
// To make arrows as none 
PopSrnVar!.permittedArrowDirections = UIPopoverArrowDirection() 
5

Swift3, este trabajo código para mí

popover.permittedArrowDirections = .init(rawValue: 0) 
1

En swift 3, puede construir una extensión UIPopoverArrowDirection para esto:

extension UIPopoverArrowDirection { 
    public static var noArrow: UIPopoverArrowDirection { 
     return UIPopoverArrowDirection(rawValue: 0) 
    } 
} 

y el que puede hacer:

popoverPresentationController!.permittedArrowDirections = .noArrow 
Cuestiones relacionadas