Общий базовый класс / код для UIView и UIImageView - альтернатива множественному наследованию в target-c - PullRequest
0 голосов
/ 09 марта 2010

У меня есть некоторые функциональные возможности, которые мне нужны во всех моих классах, которые являются производными от UIView или UIImageView.

Более конкретно, у меня есть код, связанный с жестами, который нужен обоим этим классам.
В настоящее время моя реализация:

UIGestureView : UIView
UIGestureImageView : UIImageView

и сделать все классы производными от них. Эти классы снова будут содержать методы, которые будет реализовывать производный класс.

Моя проблема в том, что код обработки жестов дублируется в UIGestureView и в UIGestureImageView.

Естественно (программистом на С ++) было бы использовать множественное наследование

UIGestureView : UIView, GestureHandler
UIGestureImageView : UIImageView, GestureHandler

и пусть GestureHandler выполнит всю общую работу, но, насколько я понял, это невозможно.

Каков объективный способ сделать это (без слишком большого количества уровней, вызывающих детей и т. Д.)?

Просто чтобы подчеркнуть, проблема в том, как избежать реализации одного и того же кода дважды, один раз в UIView (или его производном классе) и снова для UIImageView (или его производного класса).

Ответы [ 3 ]

4 голосов
/ 09 марта 2010

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

@interface UIView (GestureHandling)

- (void)didMoveAFinger:(UITouch*)touchOrWhatever;
// etc., etc.

@end

У меня были похожие проблемы с UIViewController и UITableViewController. У меня есть подкласс одного, который я хочу поделиться кодом с подклассом другого. Тем не менее, нет единого места для внедрения этого кода, если вы хотите подкласс. Альтернатива - категории общего суперкласса.

1 голос
/ 09 марта 2010
0 голосов
/ 09 марта 2010

Вы должны попробовать использовать протоколы и делегирование. Они решают проблему множественного наследования в target-c.

@protocol MyProtocol <NSObject>
//Method declarations go here
@end

@protocol MyProtocol2 <NSObject>
//Method declarations go here
@end

@interface CustomView : UIView <MyProtocol, MyProtocol2>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...