0


のハイライト状態には2 つの異なる画像 が必要UIButtonです。

私はこれらのコード行を持っています:

- (IBAction)buttonPressed:(id)sender
{
    UIImage *followImageHighlighted = [UIImage imageNamed:@"follow-hilite.png"];
    UIImage *unfollowImageHighlighted = [UIImage imageNamed:@"unfollow-hilite.png"];
    if ([sender isSelected]) {
        // set this image for the next time the button will pressed
        [sender setImage:unfollowImageHighlighted forState:UIControlStateHighlighted];
    } else {
        // set this image for the next time the button will pressed
        [sender setImage:followImageHighlighted forState:UIControlStateHighlighted];
    }
}

- (void)viewDidLoad
{
    // ...
    UIImage *followImage = [UIImage imageNamed:@"follow.png"];
    UIImage *unfollowImage = [UIImage imageNamed:@"unfollow.png"];
    [self.followButton setImage:followImage forState:UIControlStateNormal];
    [self.followButton setImage:unfollowImage forState:UIControlStateSelected];
}

問題は、ボタンを押すたびに強調表示された画像が表示されることfollow-hilite.pngです。

道路上のボタンのハイライト画像を変更できませんか?

これは悪い制限だと思います。なぜなら、ボタンが選択されて (つまり、「フォロー中」)、ユーザーがそれを押すと、デフォルトの画像が表示されます。完了すると、ボタン画像が選択したものに正しく切り替わります。

アイデア?

編集

- (IBAction)followButtonTapped:(id)sender
{
    BOOL isFollowed = [sender isSelected];
    NSString *urlString = isFollowed ? kUnfollowURL : kFollowURL;
    // operation [...]
    [self.followButton setSelected:(isFollowed) ? NO : YES];
    self.user.followed = !isFollowed;
}

私は問題をよりよく説明します:

  • デフォルト状態のボタン: 白い背景に黒いテキスト
  • 選択状態のボタン: 黒地に白文字

ターゲット ユーザーがフォローされていない場合、ボタンはデフォルトの状態であり、ボタンを押そうとすると、正しい強調表示された画像が表示されます。

しかし、ターゲットユーザーがフォローされていて、ボタンが選択された状態にある場合、ボタンを押して(指を押したままに)しようとすると、白い背景に黒いテキストのボタンが表示されます。これは非常に醜く、これは私の問題です。

4

4 に答える 4

1

それがうまくいくことを嬉しく思います。アプリケーション条件を更新することで解決しました:self.user.followed。さて、それを本当に正しくするために、これを試してください:

- (IBAction)followButtonTapped:(id)sender
{
    NSString *urlString = self.user.followed? kUnfollowURL : kFollowURL;
    // operation [...]
    self.user.followed = !self.user.followed;
}

ここで重要なのはモデルの状態です。ボタンの選択された状態は、実際の次の状態のコピーを保持している場所に横たわっていた bool のようなものです。

于 2012-04-04T00:49:05.700 に答える
1

私は解決しました:

[myButton setImage:imageSelectedHover forState:(UIControlStateSelected | UIControlStateHighlighted)];

于 2012-04-04T00:30:35.297 に答える
1

IBAction は、コントロールを構成するのに厄介な (せいぜい、または不可能な) 場所です。アプリには、別の強調表示された画像の要件をトリガーする何らかの条件が必要です。その状態を検出したときにボタンを構成します。

アプリがプレスに対して実行するはずのアクションを実行するには、「押された」コールバックを使用します。

于 2012-04-03T22:31:11.810 に答える
0

送信者に-isSelected. 代わりにこれを試してください:

- (IBAction)buttonPressed:(id)sender
{
    UIImage *followImageHighlighted = [UIImage imageNamed:@"follow-hilite.png"];
    UIImage *unfollowImageHighlighted = [UIImage imageNamed:@"unfollow-hilite.png"];
    if ([self isSelected]) {
        // set this image for the next time the button will pressed
        [(UIButton*)sender setImage:unfollowImageHighlighted forState:UIControlStateHighlighted];
    } else {
        // set this image for the next time the button will pressed
        [(UIButton*)sender setImage:followImageHighlighted forState:UIControlStateHighlighted];
    }
[self isSelected] = ![self isSelected];
}
于 2012-04-03T21:56:27.010 に答える