ios所有按钮的全局触觉反馈

ios所有按钮的全局触觉反馈,ios,objective-c,iphone,uibutton,Ios,Objective C,Iphone,Uibutton,我如何在我的应用程序中为每个UIButton的每个touchupinside事件应用触觉反馈,而不为每个按钮编写代码?我曾尝试创建一个UIButton类别并覆盖-(BOOL)pointInside:(CGPoint)pointwithevent:(UIEvent*)event,但这打乱了我的一些UIButton操作,(我可能执行得很糟糕) 有人有什么建议吗?尝试使用带有类的类别按钮。在UIButton扩展中注册ControlEvents的事件:UIControlEventTouchUpInsid

我如何在我的应用程序中为每个UIButton的每个touchupinside事件应用触觉反馈,而不为每个按钮编写代码?我曾尝试创建一个UIButton类别并覆盖
-(BOOL)pointInside:(CGPoint)pointwithevent:(UIEvent*)event
,但这打乱了我的一些UIButton操作,(我可能执行得很糟糕)


有人有什么建议吗?

尝试使用带有类的类别按钮。在UIButton扩展中注册ControlEvents的事件:UIControlEventTouchUpInside

#import "UIButton+Extention.h"

@implementation UIButton (Extention)

- (instancetype)init
{
    self = [super init];

    if (self)
    {
        [self addTarget:self action:@selector(customTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}

-(void)awakeFromNib
{
    [super awakeFromNib];

    [self addTarget:self action:@selector(customTouchUpInside:)
                                 forControlEvents:UIControlEventTouchUpInside];
}
- (void)customTouchUpInside:(UIButton *)sender
{
    //TODO:
    NSLog(@"Do something here...");
}
@end

更新:当UIButton以编程方式创建时注册事件

在类别中重写提到@ChoungTran的此类方法不是个好主意。如果您想在一个类别中自定义默认方法,最好在一个类别中自定义

但是,我更愿意创建一个从UIButton派生的自定义类,并在那里实现该逻辑,并在需要触觉的任何地方使用该按钮


发件人:

虽然Objective-C语言目前允许您使用 类别来重写类继承的方法,甚至方法 在类接口中声明,强烈建议您 这样做。类别不能代替子类。有 使用类别覆盖的几个重要缺点 方法:

当类别重写继承的方法时,中的方法 和往常一样,类别可以通过 给超级用户留言。但是,如果类别覆盖了 存在于类别的类中,无法调用原始 实施

类别不能可靠地重写在另一个类别中声明的方法 同一类别的类别

这个问题特别重要,因为许多可可豆 类是使用类别实现的。一种框架定义的方法 您试图覆盖的内容可能已在类别中实现, 因此,没有定义哪个实现优先

某些类别方法的存在可能会导致行为改变 跨所有框架。例如,如果覆盖 windowWillClose:NSObject上类别中的委托方法,所有窗口 然后,程序中的学员使用类别方法进行响应;这个 NSWindow的所有实例的行为可能会更改。分类你 添加到框架类中可能会导致行为和 导致交通事故


请注意,-awakeFromNib将仅用于从nib加载的按钮,而不用于以编程方式创建的按钮。@BorysVerebskyi是的,nib或故事板。如果要以编程方式创建,请尝试以下操作-(instancetype)init{self=[super init];If(self){[self addTarget:self action:@selector(customTouchUpInside:)forControlEvents:UIControlEventTouchUpInside];}返回self;}可以创建一个处理所有按钮的类别。我认为应该重写-viewWillMoveToSuperview,而不是重写-awakeFromNib。但是我现在懒得检查这个。此外,在你的应用程序中,你可以有一个不需要触觉的情况(例如一些使用UIButton子类的系统警报,等等)