2010-11-29 42 views
0

J'ai un élément de barre qui a été programmé au-dessus d'un contrôleur de navigation. Je veux afficher son titre et son arrière-plan aussi un effet en surbrillance lorsque j'appuie sur ce bouton. Voici le code que j'utilise:combinaison de UISegmentedControl et UIBarButtonItem dans le contrôleur de navigation à l'image d'arrière-plan personnalisée barbuttonitem

NSArray *segmentText = [segmentTextMutable copy]; 
UIImage *image = [[[UIImage alloc] init] autorelease]; 
image = [UIImage imageNamed:@"bunga.jpg"]; 

_docSegmentedControl = [[UISegmentedControl alloc] initWithItems:segmentText]; 
_docSegmentedControl.selectedSegmentIndex = 0; 
_docSegmentedControl.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
_docSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBezeled; 
[_docSegmentedControl addTarget:self action:@selector(docSegmentAction:) forControlEvents:UIControlEventValueChanged]; 
[_docSegmentedControl setBackgroundColor:[UIColor colorWithPatternImage:image]]; 

UIView *barBackground = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; 
UIButton *barButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *buttonImage = [UIImage imageNamed:@"button.png"]; 
UIImage *buttonPressedImage = [UIImage imageNamed:@"buttonPressed.png"]; 
[[barButton titleLabel] setFont:[UIFont boldSystemFontOfSize:12.0]]; 
[barButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
[barButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; 
[barButton setTitleShadowColor:[UIColor colorWithWhite:1.0 alpha:0.7] forState:UIControlStateNormal]; 
[barButton setTitleShadowColor:[UIColor clearColor] forState:UIControlStateHighlighted]; 
[[barButton titleLabel] setShadowOffset:CGSizeMake(0.0, 1.0)]; 

CGRect buttonFrame = CGRectMake(0, 0, 110.0, 40); 
//buttonFrame.size.width = 110.0; 
//buttonFrame.size.height = buttonFrame.size.height; 
[barButton setFrame:buttonFrame]; 
[barButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
[barButton setBackgroundImage:buttonPressedImage forState:UIControlStateHighlighted]; 
[barButton setTitle:docSegmentFileName forState:UIControlStateNormal]; 
[barButton addTarget:self action:@selector(docSegmentAction:) forControlEvents:UIControlEventTouchUpInside]; 
[barBackground addSubview:barButton]; 

UIBarButtonItem *segmentItem = [[UIBarButtonItem alloc] initWithCustomView:_docSegmentedControl]; 
self.navItem.leftBarButtonItem = segmentItem; 
self.navItem.leftBarButtonItem.title = @""; 
[self.navItem.leftBarButtonItem setCustomView:barBackground]; 

Malheureusement, cela ne fonctionne pas. Au lieu de montrer le UIBarButtonItem, il disparaît simplement (il devient 100% transparent). Lorsque j'omets la méthode setCustomView, le UIBarButtonItem apparaît, mais n'est pas personnalisé. Comment puis-je résoudre ce problème?

remercient ...

Répondre

0

Vous retirez la UISegmentedControl du UIBarButtonItem lorsque vous appelez [self.navItem.leftBarButtonItem setCustomView:barBackground];. Vous devez modifier UISegmentedControl et non UIBarButtonItem.