9

我目前正在为 IOS 申请,但我在更改图像时遇到了麻烦……真可惜……

情况是这样的:我有一个包含我的项目的工具栏,其中一项是从标识符“播放”创建的播放按钮。所以我的播放按钮没有问题。现在我只想在单击项目时将其更改为暂停图像,然后再次切换等。所以我喜欢在我的 .h 中给我的项目:

@property (weak, nonatomic) IBOutlet UIBarButtonItem *play;

我尝试了在这个网站上找到的许多答案,但没有一个对我的案例起作用:/我尝试的最后一个是这样的:

UIButton *button1=[UIButton buttonWithType:UIButtonTypeCustom];
[button1 setFrame:CGRectMake(10.0, 2.0, 45.0, 40.0)];
[button1 addTarget:self action:@selector(showLeft:) forControlEvents:UIControlEventTouchUpInside];
[button1 setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
UIBarButtonItem *button = [[UIBarButtonItem alloc]initWithCustomView:button1];
self.play = button;

我也试过:

self.play.customView = button1;

但是它们都没有真正起作用,我可以通过做得到图像

self.view = button1;

但是只有画面中间的图片(所以 UIImage 的创建是可以的)所以....

(如果您还可以告诉我如何使用标识符返回游戏,那也会非常有帮助,非常感谢)

谢谢你的帮助。

4

5 回答 5

12

如果按钮已经创建并且你有一个出口,你可以像这样简单地设置它:

UIImage* backgroundImage = [UIImage yourImage];
[self.barButtonItem setImage:backgroundImage];

像魅力一样工作。

于 2015-01-24T14:01:42.767 回答
11

我认为这应该有效。

-(IBAction)buttonClick:(UIBarButtonItem *)sender {

    if ([[sender backgroundImageForState:UIControlStateNormal barMetrics:UIBarMetricsDefault] isEqual:[UIImage imageNamed:@"Play.jpg"]]) {
        [sender setBackgroundImage:[UIImage imageNamed:@"Pause.jpg"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    }else{
        [sender setBackgroundImage:[UIImage imageNamed:@"Play.jpg"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    }
}

当然,您必须首先将背景图像(在 viewDidLoad 中)设置为“播放”图像才能正常工作。

编辑后:

如果你想使用系统播放和暂停按钮,据我所知,你必须更换按钮。我认为没有办法只改变图像。所以,我是这样做的。该按钮是在 IB 中使用插座 playPauseButton 和动作 playClick 设置的。我还为工具栏(toolBar)做了一个出口。

-(IBAction)playClick:(UIBarButtonItem *)sender {
    UIBarButtonItem *pause = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(pauseClick:)];
    NSMutableArray *tbItems = [self.toolBar.items mutableCopy];
    [tbItems removeObject:self.playPauseButton];
    self.playPauseButton = pause;
    [tbItems addObject:pause];
    self.toolBar.items = tbItems;
}

-(void)pauseClick:(UIBarButtonItem *)sender {
    UIBarButtonItem *play = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(playClick:)];
    NSMutableArray *tbItems = [self.toolBar.items mutableCopy];
    [tbItems removeObject:self.playPauseButton];
    self.playPauseButton = play;
    [tbItems addObject:play];
    self.toolBar.items = tbItems;
}
于 2013-08-05T16:13:40.833 回答
1

创建自定义按钮。更改按钮的大小以匹配图像。设置按钮的图像。将按钮视图添加到 UIBarButton 播放。

。H

IBOutlet UIBarButtonItem *play;

@property(nonatomic, 保留) IBOutlet UIBarButtonItem *play;

.m

UIImage *image = [UIImage imageNamed:@"image.png"];
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
button1.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );
[button1 setImage:image forState:UIControlStateNormal];
play = [[UIBarButtonItem alloc] initWithCustomView:button1];

确保在 Interface Builder 中为 UIBarButtonItem 连接插座。

祝你好运!

于 2013-08-05T15:56:21.293 回答
1

rdelmar 的答案很棒。我想添加一个增强功能,以避免按钮闪烁,因为删除和添加按钮。

-(void)pauseClick:(UIBarButtonItem *)sender {
    UIBarButtonItem *play = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(playClick:)];
    NSMutableArray *tbItems = [self.toolBar.items mutableCopy];
    self.playPauseButton = play;
    //instead of remove and add the new button, use the replaceObjectAtIndex method.
    [tbItems replaceObjectAtIndex:2 withObject:play];
    self.toolBar.items = tbItems;
}
于 2016-04-17T19:30:08.690 回答
-1

作为 UIBarButtonItem 之一,您可以为您的自定义按钮尝试类似的操作。

 - (void)viewDidLoad
 {
   // add our custom image button as the nav bar's custom right view
   UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithImage:[UIImage    imageNamed:@"email.png"]
                                style:UIBarButtonItemStyleBordered target:self  action:@selector(action:)];
   self.navigationItem.rightBarButtonItem = addButton;
   [addButton release];
 }

- (IBAction)action:(id)sender
{
    // the custom icon button was clicked, handle it here
    // change image here

}
于 2013-08-05T16:12:04.117 回答