IOS тактильная обратная связь во всем мире для всех UIButtons - PullRequest
0 голосов
/ 05 октября 2018

как я могу применить тактильную обратную связь во всем приложении для каждого события touchupinside каждого UIButton без написания кода для каждой отдельной кнопки?Я попытался создать категорию UIButton и переопределить - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event, но это испортило некоторые из моих действий UIButton (возможно, я плохо реализовал)

У кого-нибудь есть какие-либо предложения?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Переопределение в категориях таких методов, которые упоминали @ChoungTran, не такая хорошая идея.Если вы хотите настроить методы по умолчанию в категории, было бы лучше сделать это в swizzled методе .

Но я бы предпочел сделать пользовательский класс производным отUIButton, и реализуйте эту логику там и используйте эту кнопку везде, где мне нужно тактильно.


Из Документация Apple :

Хотя Objective-CВ настоящее время язык позволяет вам использовать категорию для переопределения методов, которые наследует класс, или даже методов, объявленных в интерфейсе класса, поэтому вам настоятельно не рекомендуется делать это.Категория не является заменой для подкласса.Есть несколько существенных недостатков в использовании категории для переопределения методов:

Когда категория переопределяет унаследованный метод, метод в категории может, как обычно, вызывать унаследованную реализацию через сообщение super.Однако если категория переопределяет метод, который существует в классе категории, невозможно вызвать исходную реализацию.

Категория не может надежно переопределить методы, объявленные в другой категории того же класса.

Эта проблема имеет особое значение, поскольку многие классы Какао реализованы с использованием категорий.Определенный каркасом метод, который вы пытаетесь переопределить, сам может быть реализован в категории, и поэтому реализация, которая имеет приоритет, не определена.

Само присутствие некоторых методов категории может вызвать изменения поведения во всех каркасах.Например, если вы переопределяете метод windowWillClose: делегат в категории в NSObject, все делегаты окна в вашей программе затем отвечают методом категории;поведение всех ваших экземпляров NSWindow может измениться.Категории, добавляемые вами в каркасный класс, могут вызвать загадочные изменения в поведении и привести к сбоям.

0 голосов
/ 05 октября 2018

Попробуйте использовать категорию с классом UIButton.В UIButton-Extention регистрируют событие forControlEvents: 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 создан программно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...