2009-07-02 8 views
35

ユーザーがそのボタンを押したときにUIButtonで画像を変更したいと思います。だから、私は書いたユーザーがiPhoneのボタンを押したときにUIButtonの画像を変更する

btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal]; 

その後、私はビューを変更しました。

イメージは変更されていますが、変更されたイメージは表示されません。コントロールが次のビューに移動していると思います。しかし、私は変更を表示したい、どのように私はこれを行うことができますか?あなたにこれを手伝ってください。

+1

あなたはそれを押した後で、状態を変えたいと思いますか?ボタンを押し続けている間は? – John

+0

はい、それを押した後、画像を変更する必要があります。 –

答えて

5

選択した状態の画像を変更するには、UIControlStateSelectedの場合はsetImageに電話する必要があります。さまざまな状態(通常、強調表示、無効、選択など)ごとに別々の画像を設定できます。

11

あなたが持っているコードはうまくいくはずですが、次回イベントループを実行するまでボタンの画像が変更されていないと思われますので、ビューが切り替わる前に表示されません。

これはまったくハックですが、ボタンが更新されるように少しだけビューの変更を遅らせることができます。これに代えので

:私は、まさにこの最後の夜を行うコードを書いた、と私は任意の奇妙な遅延戦術に頼る必要はありませんでした

[btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal]; 
[self performSelector:@selector(showMyOtherView) withObject:self afterDelay:0.01]; 
+0

ありがとう それは働いています... –

1

[btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal]; 
[self showMyOtherView]; 

はこれを試してみてください。この特定のケースでは、私はtableViewCellの内部からやっています。これはあなたが求めているよりも多くのコードですが、私が使用したプロセス全体を示しています。ご覧のとおり、ボタンを押している間は、特別な画像が表示されないようにしました。

// Button set up, inside cellForRowAtIndexPath: 
// imageFrame is just the rect that you want the button to occupy 
    [self setFavorite:[[UIButton alloc] initWithFrame:imageFrame]]; 
    [[self favorite] addTarget:self action:@selector(toggleFavorite:) 
     forControlEvents:UIControlEventTouchUpInside]; 
    [cell addSubview:[self favorite]]; 
    [self draw]; 


// definition of the callback specified above 
- (void) toggleFavorite:(id) sender { 
    if (favoriteState == 0){ 
    favoriteState = 1; 
    } else { 
    favoriteState = 0; 
    } 
    [self draw]; 
} 

// the draw method, to set the images 
// favOn and favOff are statically defined at the top of the class 
- (void) draw { 
    if (favoriteState != 0) { 
    [[self favorite] setBackgroundImage:favOn forState:UIControlStateNormal]; 
    [[self favorite] setBackgroundImage:favOn forState:UIControlStateHighlighted]; 
    } else { 
    [[self favorite] setBackgroundImage:favOff forState:UIControlStateNormal]; 
    [[self favorite] setBackgroundImage:favOff forState:UIControlStateHighlighted]; 
    } 
} 
92

私はInterface Builderを使用しています。ここでは、UIButtonをビューに追加しました。

  1. 私は、デフォルトではを選択し、ボタンを定義し、選択状態(画像を選択する前に、「選択状態の設定」を選択してインスペクタウィンドウで使用ドロップダウンリスト)のための私のイメージを選択しました。

  2. コントローラーにIBActionを作成し、ボタンをそのアクションに接続します。私はこれは非常に滑らかソリューションだと思います

-(IBAction) toggleUIButtonImage:(id)sender{ 
     if ([sender isSelected]) { 
     [sender setImage:unselectedImage forState:UIControlStateNormal]; 
     [sender setSelected:NO]; 
     } else { 
     [sender setImage:selectedImage forState:UIControlStateSelected]; 
     [sender setSelected:YES]; 
     } 
    } 

  • は、次に以下のコードを参照してください。それが役に立てば幸い!

  • +0

    おかげでnicsoft、これは私がパズルの一片を把握するのに役立ちました! – iwasrobbed

    +0

    あなたは男です!コードをおかげで私の問題を解決するのに役立ちます:) –

    +0

    これは絶対に正しい方法です。 –

    2

    これを実現する最も簡単な方法は、Interface Builderで強調表示されたイメージを設定することです。

    +0

    それは私が思ったものです! – user1432813

    +0

    強調表示された画像を瞬時に表示して元の状態に戻すことはできませんか? – hanumanDev

    +0

    2時間の無駄になった後、私はちょうど強調し、魅力のように動作します。ヒーローに感謝! –

    2

    Nicsoftの答えに基づいて構築してください。

    -(void)viewDidLoad { 
        [super viewDidLoad]; 
        [self.button setImage:[UIImage imageNamed:@"unselectedImageName"] forState:UIControlStateNormal]; 
        [self.button setImage:[UIImage imageNamed:@"selectedImageName"] forState:UIControlStateSelected]; 
    } 
    
    -(IBAction)toggleButton:(UIButton *)sender { 
        sender.selected = !sender.selected; 
        // Add logic here 
    } 
    
    19

    これは、私はそれをやっている最も簡単な方法であり、それはあなたがそのような選択した他の状態のために他の同様のチェックを使用することができますたびに

    -(void)buttonTouched:(id)sender 
    { 
    UIButton *btn = (UIButton *)sender; 
    
    if([[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-Locked.png"]]) 
        { 
         [btn setImage:[UIImage imageNamed:@"icon-Unlocked.png"] forState:UIControlStateNormal]; 
         // other statements 
        } 
    else 
        { 
         [btn setImage:[UIImage imageNamed:@"icon-Locked.png"] forState:UIControlStateNormal]; 
         // other statements 
        } 
    } 
    

    の作品、強調表示を可能にしました。

    +0

    完璧な答え.......ありがとう:) –

    3

    あなたはボタンがクリックされたときに画像を変更したい場合は、この方法で、完璧に動作します:

    -(IBAction)buttonClicked: (id)sender 
    { 
        UIButton *buttonObj = (UIButton*)sender; 
        [buttonObj setBackgroundImage:[UIImage imageNamed:@"myImage.png"] 
        forState:UIControlStateNormal]; 
    } 
    
    0

    は答えの過多に追加するヘイト、しかし:

    1. 画像を選択中ボタンのデフォルトおよび選択状態については、図1Bを参照してください。
    2. IBActionを接続してシンプルにしてください。完了

      @IBAction func buttonTapped(sender: UIButton){sender.selected = !sender.selected}

    関連する問題