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

IBAction 是一个尴尬的(充其量是,或不可能)配置控件的地方。您的应用程序中必须有一些条件会触发对不同突出显示图像的要求。当您检测到该情况时配置按钮。

使用“按下”回调来执行应用程序应该在按下时采取的任何操作。

于 2012-04-03T22:31:11.810 回答
1

我已经解决了:

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

于 2012-04-04T00:30:35.297 回答
1

很高兴它有效。您通过更新应用程序条件解决了它:self.user.followed。现在,为了让它真正正确,试试这个:

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

模型的状态在这里很重要。按钮的选定状态更像是一个布尔值,它位于您保存真实跟随状态副本的位置。

于 2012-04-04T00:49:05.700 回答
0

我认为您需要在尝试修改任何重要内容并计算变量之前将 sender 转换为 UIButton*,因为 sender包含名为-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 回答