2010-09-08 5 views
2

Je veux pu un badge sur le UIBarButtonItem qui contrôle popover dans un SPLITVIEWComment implémenter un Badge pour un UIBarButtonItem?

Ce code ne rien faire:

- (void)splitViewController: (UISplitViewController*)svc 
    willHideViewController:(UIViewController *)aViewController 
      withBarButtonItem:(UIBarButtonItem*)barButtonItem 
     forPopoverController: (UIPopoverController*)pc 
{ 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)]; 
    [view setBackgroundColor:[UIColor greenColor]]; 
    UIView *badge = [[UIView alloc] initWithFrame:CGRectMake(36, 0, 8, 8)]; 
    [badge setBackgroundColor: [UIColor redColor]]; 
    [view addSubview:badge]; 
    [badge release]; 


    UIBarButtonItem *aBBItem = [[UIBarButtonItem alloc] initWithCustomView:view]; 
    [aBBItem setTarget:barButtonItem.target]; 
    [aBBItem setAction:barButtonItem.action]; 
    NSLog(@"%@ %s", aBBItem.target, aBBItem.action); 
    [view release]; 

    barButtonItem.title = @"Bars"; 
    NSMutableArray *items = [[toolbar items] mutableCopy]; 
    [items insertObject:aBBItem atIndex:0]; 
    [aBBItem release]; 
    [toolbar setItems:items animated:YES]; 
    [items release]; 
    self.popoverController = pc; 
} 

alors que la tentative suivante renvoie une erreur:

- (void)splitViewController: (UISplitViewController*)svc 
    willHideViewController:(UIViewController *)aViewController 
      withBarButtonItem:(UIBarButtonItem*)barButtonItem 
     forPopoverController: (UIPopoverController*)pc 
{ 
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)]; 
    UIView *badge = [[UIView alloc] initWithFrame:CGRectMake(36, 0, 8, 8)]; 
    [badge setBackgroundColor: [UIColor redColor]]; 
    [button addSubview:badge]; 
    [badge release]; 
    [button addTarget:barButtonItem.target action:barButtonItem.action forControlEvents:UIControlEventTouchUpInside]; 
    [button setTitle:@"Bars" forState:UIControlStateNormal]; 

    UIBarButtonItem *aBBItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
    [button release]; 

    barButtonItem.title = @"Bars"; 
    NSMutableArray *items = [[toolbar items] mutableCopy]; 
    [items insertObject:aBBItem atIndex:0]; 
    [toolbar setItems:items animated:YES]; 
    [aBBItem release]; 
    [items release]; 
    self.popoverController = pc; 
} 

Erreur:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a UIBarButtonItem that is not in a toolbar or navigation bar already.'

Comment puis-je ajouter un badge à un UIBarButtonItem?

Répondre

0

Voici comment je l'ai fait, au lieu de réorienter la cible et l'action, nous avons créé une méthode pour cela, voir
-(void)pop:(UIButton *)sender.

-(void)splitViewController: (UISplitViewController *)svc 
    willHideViewController: (UIViewController *)aViewController 
     withBarButtonItem: (UIBarButtonItem *)barButtonItem 
     forPopoverController: (UIPopoverController *)pc 
{ 

    // configure barButton 
    UIButton * button = [UIButton buttonWithType : UIButtonTypeCustom]; 
    UIImage * image = [UIImage imageNamed:@ "barbutton.png"]; 
    [button setImage :image forState: UIControlStateNormal]; 
    button.frame = CGRectMake(0, 0, image.size.width, image.size.width); 
    [button addTarget: self 
       action: @selector(pop:) 
    forControlEvents: UIControlEventTouchUpInside]; 

    barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

    NSMutableArray * items = [[toolbar items] mutableCopy]; 
    [items insertObject: barButtonItem atIndex: 0]; 
    [toolbar setItems: items animated: YES]; 
    [items release]; 
    self.popoverController = pc; 
    [barButtonItem release]; 
} 

-(void)pop: (UIButton *)sender { 
    [self.popoverController presentPopoverFromRect: sender.frame 
              inView: self.view 
          permittedArrowDirections: UIPopoverArrowDirectionUp 
              animated: YES]; 
} 
+0

wow, je ne m'y attendais une réponse plus. Merci! – vikingosegundo

+0

et bienvenue chez SO! – vikingosegundo

+11

Où le badge est-il ajouté dans ce code? – RPM

Questions connexes