9

現在IOS用のアプリを作っているのですが、画像の変更がうまくいかず…残念です…

状況は次のとおりです。アイテムを含むツールバーがあり、このアイテムの 1 つは識別子 "Play" から作成された再生ボタンです。だから私は問題なく再生ボタンを持っています。ここで、アイテムをクリックしてからもう一度切り替えるなどの一時停止画像に変更したいだけです。

@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 で) 背景画像を「再生」画像に設定する必要があります。

編集後:

システムの再生ボタンと一時停止ボタンを使いたい場合は、私の知る限り、ボタンを交換する必要があります。イメージを変えるしか方法はないと思います。というわけで、こうしました。このボタンは、アウトレット playPauseButton とアクション playClick を使用して IB でセットアップされました。また、ツールバー (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 play に追加します。

.h

IBOutlet UIBarButtonItem *再生;

@property(非アトミック、保持) 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 の 1 つとして、カスタム ボタンに対してこのようなことを試すことができます。

 - (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 に答える