gpt4 book ai didi

ios - 根据标签突出显示按钮?

转载 作者:行者123 更新时间:2023-11-29 02:59:29 25 4
gpt4 key购买 nike

我有一个 UIViewController,它有一堆按钮,每个按钮都有一个(唯一的)标签。我写了下面的方法:

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

我想做的是有一堆按钮,每个按钮的功能都像一个开关:当我点击一个按钮时,它应该被激活(即突出显示),而之前突出显示的那个应该变为“未”突出显示。

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

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

这似乎工作得很好:当 View 出现时,第一个按钮被选中。但是,当我尝试通过连接到按钮的 @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];
}

我在这里错过了什么?

最佳答案

问题是系统会自动高亮然后取消高亮分别在 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];
}

关于ios - 根据标签突出显示按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23462880/

25 4 0