Категории в любом случае не помогли бы, потому что замена реального метода touchesBegan на UIButton была бы довольно плохой ... Вы не можете вызывать [super] из категории.
Другое решение - ввести метод вэти определения классов с чем-то вроде:
Method origMethod = class_getClassMethod([UIButton class], @selector(touchesBegan));
Method newMethod = class_getClassMethod([TemplateClass class], @selector(replacementTouchesBegan));
method_exchangeImplementations(origMethod, newMethod);
Но это довольно сложно.Хотя, если вы действительно хотите туда попасть, стоит посмотреть ...
Что бы я сделал, это сделал бы класс MovableView, который наследовал бы от UIView, и просто добавил все, что вы хотите, чтобы переместить, как подпредставление этого представления.(что, я думаю, может немного отличаться от того, что говорил Кихото, мои извинения, если нет).Сначала он реагирует на прикосновения и передает следующему респонденту все, что ему не нужно ... нет необходимости создавать специальный класс с одним подпредставлением.Затем в IB вы можете просто поместить эти подвижные виды в любое место и поместить в них вещи.
В общем, такие композиционные методы очень удобны в UIKit, а не модифицируют базовые классы.