Одна вещь, которую я сделал в прошлом - если я расширяю класс, я попытаюсь следовать их соглашениям. Например, при работе с Платформой Spring, у меня будут свои Классы контроллера MVC в пакете названными com.mydomain.myapp.web.servlet.mvc, Если я не расширю что-то, что я просто иду с тем, что является самым простым. com.mydomain.domain для Объектов области (хотя, если у Вас есть тонна объектов области, этот пакет мог бы стать немного громоздким). Для зависящих от домена констант я на самом деле поместил их как общедоступные константы в самом связанном классе. Например, если я имею "членский" класс и имею максимальную постоянную длину имени элемента, я поместил его в членский класс. Некоторые магазины делают отдельный класс Констант, но я не вижу значение в смешивании несвязанных чисел и строк в единый класс. Я видел, что некоторые другие магазины пытаются решить эту проблему путем создания ОТДЕЛЬНЫХ классов Констант, но это просто походит на пустую трату времени, и результат слишком сбивает с толку. Используя эту установку, крупный проект с несколькими разработчиками будет копировать константы повсеместно.
Думаю, для этого вам нужно создать подкласс UIScrollView.
touchesBegan: withEvent: отправляется только в подклассы UIView. Вы, вероятно, реализуете touchesBegan: withEvent: в своем контроллере, верно? Если это так, оттуда это не сработает ...
В качестве альтернативы, если вы поместите подкласс UIView (который вы написали) в свой UIScrollView, вы также можете оттуда перехватить событие touchesBegan (но только когда пользователь касается это конкретное подвид). UIScrollView по умолчанию передает касания своим подпредставлениям (см. TouchesShouldBegin: withEvent: inContentView: в UIScrollView).
Вы должны добавить touchesBegan: withEvent: в свой UIScrollView, а не в UIScrollViewDelegate. UIScrollView - это подкласс UIResponder, который имеет сенсорные события.
Вы также можете реагировать на эти события в вашем контроллере. Чтобы это работало, вы должны определить эту функцию (в вашем контроллере):
- (BOOL)canBecomeFirstResponder {
return YES;
}
Затем в 'viewDidAppear' вам нужно вызвать 'beginFirstResponder':
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];