如何同时实现两个UIButton?

Posted

技术标签:

【中文标题】如何同时实现两个UIButton?【英文标题】:How to implement two UIButton at the same time? 【发布时间】:2013-02-19 02:40:01 【问题描述】:

我创建了 2 个 UIButton(不同的标签)并连接到 1 个动作,但是当同时按下时,它会以很小的延迟触发 2 个动作。

- (IBAction)keysPress:(UIButton *)sender 
    UIButton *butOne = (UIButton *)[sender viewWithTag:0];
    UIButton *butTwo = (UIButton *)[sender viewWithTag:1];
    NSLog(@"BUT 1: %@ || BUT 2: %@",butOne, butTwo);

总是记录 2 次:

2013-02-19 09:37:40.933 TestActions[1107:c07] BUT 1: <UIButtonLabel: 0xca4d450; frame = (65 67; 9 19); text = 'â'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xca4d4c0>> || BUT 2: <UIRoundedRectButton: 0xca4d310; frame = (161 164; 139 153); opaque = NO; autoresize = RM+BM; tag = 1; layer = <CALayer: 0xca4d270>>

2013-02-19 09:37:40.935 TestActions[1107:c07] BUT 1: <UIRoundedRectButton: 0xca4c5c0; frame = (20 164; 135 153); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0xca4c6b0>> || BUT 2: (null)

如何控制这种情况? 2 个按钮,1 个动作 - 触发 1 次。

【问题讨论】:

【参考方案1】:

你似乎不明白sender 是什么。发送者是触发事件的按钮,您可以根据它是什么来编程。

您需要保存对按钮的引用,然后在进入函数时将它们与发送者进行比较。

@property (nonatomic, weak) IBOutlet UIButton *butOne;
@property (nonatomic, weak) IBOutlet UIButton *butTwo;

-(IBAction)keysPress:(UIButton *)sender 
   if(sender == [self butOne]) 
       //Do button one actions
    

   if(sender == [self butTwo]) 
       //Do button two actions
   

如果您不想保留引用并使用 viewWithTag 的东西,我真的不建议这样做,但如果您这样做,您可以:

- (IBAction)keysPress:(UIButton *)sender 
   UIButton *butOne = (UIButton *)[self viewWithTag:1];
   UIButton *butTwo = (UIButton *)[self viewWithTag:2];
   if(sender == butOne) 
       //Do button one actions
    

   if(sender == butTwo) 
       //Do button two actions
   

【讨论】:

永远不要使用0 标签,因为这是默认设置。此外,如果您只使用if (sender.tag == 1),标记方法会更容易。无需为每个标签获取UIButton 谢谢!按照您的指南,我会检查 [sender tag] 并存储点击按钮。 感谢您提供有关标签的信息。由于可用性,我个人不使用它们。更改标签,你突然不得不改变你硬编码标签的任何地方:(。我不确定你的意思是“不需要为每个标签获取 UIButton”?【参考方案2】:
- (IBAction)keysPress:(UIButton *)sender 
    if(_canClick)
    
        _canClick = NO;
        UIButton *butOne = (UIButton *)[sender viewWithTag:0];
        UIButton *butTwo = (UIButton *)[sender viewWithTag:1];
        NSLog(@"BUT 1: %@ || BUT 2: %@",butOne, butTwo);
        [self performSelector:@selector(makeButtonCanClick) withObject:nil afterDelay:YOURTIMEINTERVAL];
    



- (void)makeButtonCanClick

    _canClick = YES;

_canClickBOOL ivar ,默认是 YES

【讨论】:

对不起,非常好的解决方案,但我不能很快理解。非常感谢!

以上是关于如何同时实现两个UIButton?的主要内容,如果未能解决你的问题,请参考以下文章

如何同时为 UIButton 的 titleLabel 的框架和 alpha 设置动画?

如何在按住手指的同时从使用一个 UIButton 切换到另一个?

如何在保持图像纵横比的同时调整 UIButton 中的图像大小?

如何捕获 UIButton 事件:在自定义 UITableViewCell 实现中添加了 UIButton

如何禁用 UIButton 突出显示操作

如何在 OBJECTIVE C 的 UITableViewCell 中更改先前按下的 UIButton 标签?