2010-11-22 34 views
6

我试图改变一个UIBarButtonItem的图像一旦按下,没有任何运气的各种方法。无法更改UIBarButtonItem的图像

// bookmarkButton is a property linked up in IB 
-(IBAction)bookmarkButtonTapped:(id)sender 
{ 
NSLog(@"this action triggers"); 
// attempt 1 
UIBarButtonItem* aBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bookmarkdelete.png"] style:UIBarButtonItemStylePlain target:self action:@selector(bookmarkButtonTapped:)]; 
bookmarkButton = aBarButtonItem; 
[aBarButtonItem release]; 

// attempt 2 
bookmarkButton.image = [UIImage imageNamed:@"bookmarkdelete.png"]; 
} 

是否有另一种方法可以做到这一点?

回答

2

工具栏包含数组 - 项目 - 作为一个属性。因此,在设置工具栏作为一个IBOutlet属性之后,我不得不插入一个新的按钮到该阵列..像这样:

NSMutableArray *items = [[NSMutableArray alloc] initWithArray:self.toolBar.items]; 
UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"newButton.png"] style:UIBarButtonItemStylePlain target:self action:@selector(buttonTapped:)]; 
[items replaceObjectAtIndex:0 withObject:newButton]; 
self.toolBar.items = items; 
[newButton release]; 
[items release]; 
0

bookmarkButton是一个UIButton吗?是否应通过(UIButton *)aBarButtonItem.customView而不是直接引用?

如果它是一个UIButton,那么你就需要设置基于状态的图像:- (void)setImage:(UIImage *)image forState:(UIControlState)state

注意,也有setBackgroundImage用相同的API,如果你想要的吧。

+0

bookmarkButton是的UIBarButtonItem在成立笔尖。 – cannyboy 2010-11-22 15:03:03

-3

尝试[bookmarkButton setImage:[UIImage imageNamed:@"bookmarkdelete.png"] forState:UIControlStateNormal];

+0

我得到一个错误'UIBarButtonItem'可能无法响应-setImage:forState:'当我尝试。 – cannyboy 2010-11-22 15:01:41

0

这应该工作

UIImage *normalButtonImage = [UIImage imageNamed:@"TableViewIcon"]; 
UIImage *selectedButtonImage = [UIImage imageNamed:@"CollectionViewIcon"]; 
CGRect rightButtonFrame = CGRectMake(0, 0, normalButtonImage.size.width, 
            normalButtonImage.size.height); 
UIButton *rightButton = [[UIButton alloc] initWithFrame:rightButtonFrame]; 
[rightButton setBackgroundImage:normalButtonImage forState:UIControlStateNormal]; 
[rightButton setBackgroundImage:selectedButtonImage forState:UIControlStateSelected]; 
[rightButton addTarget:self action:@selector(toggleTableView:) 
     forControlEvents:UIControlEventTouchDown]; 
self.toggleMediaView = [[UIBarButtonItem alloc] initWithCustomView:rightButton]; 
[self.navigationItem setLeftBarButtonItem:self.toggleMediaView]; 
self.navigationItem.leftBarButtonItem.enabled = NO;