通过手势识别器更改 UIButton 默认操作

Posted

技术标签:

【中文标题】通过手势识别器更改 UIButton 默认操作【英文标题】:change UIButton default action by gesture recognizer 【发布时间】:2016-10-19 13:31:34 【问题描述】:

看不懂Event Handling Guide for ios-Interacting with Other User Interface Controls里的表达方式

如果您有这些控件之一的自定义子类并且想要更改 >default 操作,请将手势识别器直接附加到控件而不是 > 父视图。然后,手势识别器首先接收到触摸事件。

谁能给我一些例子?谢谢

【问题讨论】:

声明似乎很清楚。将手势识别器显式添加到您的特定控件。我不确定为什么它甚至必须是自定义控件。我只是尝试这样做,看看它是否有效。 【参考方案1】:

子类UIButton 附加手势识别器。

在 CustomButton.m 中

#import "CustomButton.h"

@implementation CustomButton

- (instancetype)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 

        UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
                                              initWithTarget:self action:@selector(handleTap)];
        tapGesture.numberOfTapsRequired = 2;
        [self addGestureRecognizer:tapGesture];
    
    return self;


- (void)handleTap

    NSLog(@"Button tapped twice");

在您的 ViewController 中启动按钮并添加为子视图

#import "ViewController.h"
#import "CustomButton.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    CustomButton *customButton = [[CustomButton alloc] initWithFrame:CGRectMake(100.0f, 100.0f, 150.0f, 100.0f)];
    [customButton setTitle:@"Tap Twice" forState:UIControlStateNormal];
    customButton.backgroundColor = [UIColor grayColor];
    [self.view addSubview:customButton];


通常按钮在单击时工作。我们正在通过将点击手势识别器和点击次数增加 2 来更改按钮的默认行为。

【讨论】:

非常感谢!!我误解了“父视图”,我以为是按钮(orz)

以上是关于通过手势识别器更改 UIButton 默认操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在滑动手势识别器函数中找到 UIButton 元素的父元素以构造对象?

UIButton上的长按手势识别器?

UIButton 和滑动手势

如何将手势识别器添加到 UITableViewCell 的 UIImage 和 UIButton?

当有长按手势识别器时,UIButton 不会改变文本颜色

IOS 手势事件的冲突