2010-10-02 16 views
14

Je voudrais savoir faire une UIPopoverController sans flèches En fait, je voudrais simuler quelque chose comme ceci: Screenshot of the set-passcode screen from the iPad's System PreferencesUIPopoverController sans flèches?

Voir que

  • Il n'y a pas de flèches

  • Il est un titre qui est en quelque sorte à l'intérieur d'une bordure supérieure étendue de l'UIPopoverController et non à l'intérieur comme dans l'UIPopoverController normal.

Je suppose que ce n'est pas vraiment un objet UIPopoverController mais je vous serais reconnaissant de conseils sur comment puis-je faire le même effet (en utilisant CoreGraphics -> spécialement l'effet degrade translucide de la frontière exceptionnelle 3D) et/ou liens à certaines sources si quelqu'un l'a déjà fait auparavant.

Merci d'avance.

Ignacio

EDIT:

Je cherche toujours ce genre de choses et réalisé que même dans des applications de tiers est utilisé un exemple: twitterrific pour iPad comme on le voit sur cette photo. Quelqu'un s'il vous plaît? Mettre le titre dans le popovercontroller est juste moche. alt text

Répondre

4

Bien qu'il y ait une question de savoir si Apple va approuver des applications qui créent un popover sans flèche, vous voudrez peut-être vérifier ce post regarding arrows et ce post regarding modal views.

+0

Je ne pense pas qu'il y ait un problème si aucune flèche n'est présentée. Comme le lien que vous avez suggéré, l'option est disponible non? ;) Mais je ne comprends toujours pas comment mettre un titre dans le popovercontroller comme dans les images montrées. J'ai essayé la propriété de titre de UIViewController mais ne fonctionnait pas. – nacho4d

+0

J'ai trouvé la solution ici: http://stackoverflow.com/questions/2617409/setting-the-title-of-a-uipopovercontroller – nacho4d

1

Pour créer un popover avec un titre, vous devez créer une vue séparée comme vous feriez une fenêtre séparée, puis charger cette vue dans le popover.

19

La méthode ci-dessous fonctionne très bien pour moi (y compris iOS 7)

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

+1, mais pour MonoTouch, utilisez uint.MinValue au lieu de "NULL" pour enlever le flèche –

1

La bordure supérieure est produit en plaçant un contrôleur de navigation entre le popover et le contrôleur de vue présenté. En d'autres termes, le survoleur présente un contrôleur de navigation et le contrôleur de vue racine du contrôleur de navigation est défini sur votre contrôleur de vue. Cela produit la barre de titre et vous permet de définir le titre avec [self setTitle:@"My Title"] et ajouter des boutons de navigation.

1

Vous pouvez ajouter un titre à l'aide d'un UINavigationController et ajouter des UIViewControllers au contrôleur de navigation. Définissez l'attribut 'title' du UIViewController pour que le titre apparaisse. La définition de la direction de la flèche sur NULL, comme certains l'ont suggéré, peut entraîner un comportement imprévisible, car la méthode utilise cette variable pour déterminer comment orienter la fenêtre contextuelle par rapport à l'élément ou au rectangle de votre bouton.

Il est préférable de sous-classer UIPopoverBackgroundView et de définir les différentes méthodes de retour de flèches pour renvoyer 0 pour les flèches (iOS5 et versions ultérieures uniquement).Voir cet exemple pour savoir comment sous-classe cela correctement:

http://blog.teamtreehouse.com/customizing-the-design-of-uipopovercontroller

exemple de mise en œuvre simple (MyCustomPopoverBGView est la sous-classe de UIPopoverBackgroundView dans cet exemple):

UIViewController *vCtrlr = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
vCtrlr.title = @"My Title"; 
self.navCtrlr = [[UINavigationController alloc] initWithRootViewController:vCtrlr]; 
self.popCtrlr = [[UIPopoverController alloc] initWithContentViewController:_navCtrlr]; 
_popCtrlr.popoverBackgroundViewClass = [MyCustomPopoverBGView class]; 
      [_popCtrlr presentPopoverFromRect:CGRectMake(0, 
                 0, 
                 320, 
                 150) 
             inView:self permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
0

il suffit de copier & Collez le code ci-dessous

UIViewController *popovercontroller=[[UIViewController alloc] init]; 
UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(312,390, 400, 344)]; 
popoverView.backgroundColor=[UIColor whiteColor]; 

popovercontroller.contentSizeForViewInPopover=CGSizeMake(400, 300); 



UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 400, 0)]; 
[pickerView setTintColor:[UIColor blackColor]]; 
[pickerView addTarget:self action:@selector(dueDateChanged:) forControlEvents:UIControlEventValueChanged]; 

pickerView.datePickerMode = UIDatePickerModeDate; 
pickerView.hidden = NO; 
NSString *bs ; //= [NSString alloc]; 
// //NSDate *newDate = [NSData alloc]; 
bs = CurrentSelectedDate; 
if (bs.length >= 1) { 
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ; 
    //  //[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
    //  [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 
    [dateFormatter setDateFormat:@"dd-MMM-yyyy"]; 
    // NSDate *myDate = [dateFormatter dateFromString: txtText.text]; 
    pickerView.date = [dateFormatter dateFromString: CurrentSelectedDate]; 

} 
else 
{ 
    pickerView.date = [NSDate date]; 
} 
[popoverView addSubview:pickerView]; 



// pickerView.date = [dateFormatter dateFromString:txtText.text]; 
UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 400, 44)]; 
pickerToolbar.barStyle = UIBarStyleDefault; 
pickerToolbar.barTintColor=[UIColor colorWithRed:150.0f/255.0f green:91.0f/255.0f blue:129.0f/255.0f alpha:1.0f]; 

[pickerToolbar sizeToFit]; 
self.navigationController.toolbar.barTintColor = [UIColor colorWithRed:150.0f/255.0f green:91.0f/255.0f blue:129.0f/255.0f alpha:1.0f]; 
NSMutableArray *barItems = [[NSMutableArray alloc] init]; 

UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil]; 
[barItems addObject:flexSpace]; 

UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)]; 
doneBtn.tintColor=[UIColor whiteColor]; 
[barItems addObject:doneBtn]; 

UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)]; 
cancelBtn.tintColor=[UIColor whiteColor]; 
[barItems addObject:cancelBtn]; 

[pickerToolbar setItems:barItems animated:YES]; 


[popoverView addSubview:pickerToolbar]; 
popovercontroller.view=popoverView; 

pickerViewPopup = [[UIPopoverController alloc] initWithContentViewController:popovercontroller]; 

[pickerViewPopup presentPopoverFromRect:CGRectMake(312, 212, 400, 344) inView:self.view permittedArrowDirections:0 animated:YES]; 
4

Passez le 0 au permittedArrowDirections attribut.

[popoverController presentPopoverFromRect:YOUR_RECT 
            inView:self.view 
        permittedArrowDirections:0 
            animated:YES];