根据标签突出显示按钮?

时间:2014-05-04 23:45:48

标签: ios objective-c uibutton

我有一个UIViewController,其中包含一组按钮,每个按钮都有一个(唯一的)标记。我写了以下方法:

- (void) highlightButtonWithTag: (NSInteger) tag
{
    UIButton *btn = (UIButton *)[self.view viewWithTag: tag];
    btn.highlighted = YES;
}

我要做的是有一堆按钮,每个按钮的功能就像一个切换:当我点击一个按钮时,它应该变为活动状态(即突出显示),之前突出显示的按钮应变为" un& #34;突出

当视图出现时,我使用viewDidAppear方法设置初始选择:

- (void) viewDidAppear:(BOOL)animated
{
     self.selectedIcon = 1;
     [self highlightButtonWithTag: self.selectedIcon];
}

这似乎工作正常:当视图出现时,第一个按钮被选中。但是,当我尝试通过连接到按钮的@selector更新内容时,前一个按钮会突出显示,但sender.tag按钮不会突出显示。

- (IBAction) selectIcon:(UIButton *)sender
{
    // "Un"highlight previous button
    UIButton *prevButton = (UIButton *)[self.view viewWithTag: self.selectedIcon];
    prevButton.highlighted = NO;

    // Highlight tapped button:
    self.selectedIcon = sender.tag;
    [self highlightButtonWithTag: self.selectedIcon];
}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

问题是系统自动突出显示然后分别取消触摸touchDown和touchUp上的按钮。因此,在系统未突出显示之后,您需要再次突出显示该按钮。您可以使用performSelector:withObject:afterDelay:即使延迟为0(因为选择器是在运行循环上调度的,这是在系统完成后不亮的情况下发生的)。要使用该方法,您必须传递一个对象(不是整数),因此如果稍微修改代码以使用NSNumbers,它将如下所示,

- (void) highlightButtonWithTag:(NSNumber *) tag {
    UIButton *btn = (UIButton *)[self.view viewWithTag:tag.integerValue];
    btn.highlighted = YES;
}


- (void) viewDidAppear:(BOOL)animated {
    self.selectedIcon = 1;
    [self highlightButtonWithTag: @(self.selectedIcon)];
}


- (IBAction) selectIcon:(UIButton *)sender {
    // "Un"highlight previous button
    UIButton *prevButton = (UIButton *)[self.view viewWithTag: self.selectedIcon];
    prevButton.highlighted = NO;

    // Highlight tapped button:
    self.selectedIcon = sender.tag;
    [self performSelector:@selector(highlightButtonWithTag:) withObject:@(self.selectedIcon) afterDelay:0];
}