Как отметили Antwan и jjwchoy , существует несколько способов сделать что-то подобное. В большинстве языков ООП подклассы являются предпочтительным способом. Подкласс наследует все удовольствия своего суперкласса, а также ваше пользовательское поведение. Для этого вы должны реализовать класс так, как показано ниже:
В JULView.h (название вашего нового класса) будет такой код
#import <Foundation/Foundation.h>
//... #import for all of the other classes/libraries you need
@interface JULView : UIView
{
// your iVars go here
}
// Your Custom Properties and Methods go here
- (void)customMethod
@end
А В файле реализации ( JULView.m )
#import "JULView.h"
// Synthesize your properties here
@implementation JULView
#pragma mark - Initialization
- (id)init
{
[super init];
// Additional initialization
}
#pragma mark - Custom methods
- (void)customMethod1
{
// A custom method code
}
#pragma mark - Overwritten UIView Methods
// Your touch handling stuff
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// Your code
}
@end
Чтобы использовать этот новый подкласс, просто импортируйте файл заголовка
#import "JULView.h"
в класс, который вы используете, и создание экземпляра JULView так же, как и в UIView
// instead of
UIView *aView = [[UIView alloc] init];
// you would use
JULView *aView = [[JULView alloc] init];
Помимо подклассов, Objective-C предоставляет еще несколько способов достижения этого: шаблон делегата и категории. jjwchoy проделал отличную работу, описав общий способ реализации использования делегатов, поэтому нет необходимости его срыгивать. Вместо этого давайте пройдемся по категориям.
Категории расширение существующего класса дополнительными методами или вашей версии существующих методов. Например, допустим, вы хотите добавить метод, который возвращает первую букву строки в NSString. Для этого вы должны создать категорию следующим образом:
Интерфейс - JULString.h
#import NSString
@interface NSString (JULString)
-(NSString *) firstLetter;
@end
Реализация. Типичное соглашение заключается в том, что именем категории является имя класса, который вы расширяете, за которым следует «+» и название категории. В этом случае файл будет называться NSString + JULString.m
#import "NSString+JULString.h"
@implementation NSString ( JULString )
- (NSString *)firstLetter
{
return [NSString stringWithFormat:@"%C", [self characterAtIndex:1]];
}
@end
Отличительная особенность категорий заключается в том, что теперь они расширяют поведение ЛЮБОГО экземпляра класса, с которым вы работаете. Другими словами, любая NSString в вашем приложении будет иметь ваши новые методы (при условии, что вы, конечно, импортируете правильный заголовочный файл). Однако будьте осторожны, так как с большой силой приходит большая ответственность. Перезапись класса с использованием категории поведения может привести к нежелательным последствиям, поэтому будьте осторожны.
Несколько ссылок, которые вы можете проверить:
Примечание:
У меня нет моего Mac, поэтому я пишу этот код в основном на макушке (и использую некоторый код с сайтов выше в качестве напоминания). Поэтому заранее прошу прощения за любые ошибки;)