管理多个按下的 UIButtons

Posted

技术标签:

【中文标题】管理多个按下的 UIButtons【英文标题】:manage multiple pressed UIButtons 【发布时间】:2012-07-30 03:01:30 【问题描述】:

我有一个带有许多 UIButtons 的 uiviewcontroller,这些 UIButtons 旨在被选中并保持按下直到再次被触摸。我在 viewDidLoad 中定义了每个按钮,并为它们提供了相同的选择器方法(tapButton):

    [button1 addTarget:self action:@selector(tapButton:) forControlEvents:UIControlEventTouchUpInside];
    [button2 addTarget:self action:@selector(tapButton:) forControlEvents:UIControlEventTouchUpInside];
    ...

我想做的是在 tabButton: 方法中,使用选择器来确定按下了哪个按钮,然后使用以下内容更改其状态:

- (IBAction) tapButton:(id)sender

  if ( sender.selected ) 
    sender.highlighted = NO;
    sender.selected = NO;
 else 
    sender.highlighted = YES;
    sender.selected = YES;


您会注意到这只是一个伪代码,因为我不能真正执行“sender.selected”或“sender.highlighted”,但这就是我想要完成的。

有什么方法可以做到这一点吗?我不想创建 30 个“tapButton”方法(这就是我拥有的 UIButton 的数量,是的……)来管理每个 UIButton 的状态。

非常感谢!

【问题讨论】:

你为什么不能sender.selectedsender.highlighted??它们是有效的......这正是 sender 参数的用途(它是按下的按钮) 我希望我能做到这一点,但我遇到了错误......这会让我的生活变得更轻松! “错误”...对你的描述非常好。也许您的问题应该是关于这些错误?我一直以这种方式切换选择。 不,您可以自动更改的唯一内容是标题、标题字体颜色、标题字体阴影颜色、图像和背景图像。其他任何事情都必须手动完成。 您是否已经尝试过以下操作:***.com/questions/3300534/… 【参考方案1】:

你可以像这样设置每个按钮的tag

button1.tag = 1;
button2.tag = 2;
....

然后在你的选择器中

- (IBAction) tapButton:(id)sender

   switch((UIButton*)sender.tag)
     case 1:
     .....
   

【讨论】:

好主意,我喜欢它,但希望能找到更“优雅”的东西...+1。 继续寻找,如果你得到它,请告诉我:)【参考方案2】:
UIButton * selectedButton = [[UIButton allo]init];
/*for removing old highlight*/
selectedButton.higlighted = NO;
selectedButton = sender;
/*for setting new button highlight*/ sender.selected = YES

上面的代码会帮助你。这里使用新按钮来存储最后一个按钮状态

【讨论】:

这段代码没有意义。您应该删除第一行,并在第二行使用self.selectedButton.highlighted = NO【参考方案3】:

您可以为此使用 switch case...或者您也可以通过使用 alpha 属性来实现它...

-(IBAction) tapButton:(id)sender

    UIButton *btn = (UIButton *)sender;
    if ([btn isSelected]) 
    
        btn.selected = NO;
        btn.alpha = 0.5;
     else 
        btn.selected = YES;
        btn.alpha = 1;
    

【讨论】:

以上是关于管理多个按下的 UIButtons的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获在包含多个表单的页面上按下的输入键?

如何在 VB.NET 中检测多个修改按钮和按下的字符

如何根据按下的 UIButton 重新填充表格视图?

电脑上的设置粘滞键是啥?

识别按下的标签按钮以移动到下一个响应者

Firemonkey里触发home按键被按下的事件