Я использую пользовательский подкласс UIScrollView
с именем ImageScrollView
. Мне нужно знать, когда пользователь нажимает на представление прокрутки, поэтому я создал протокол. Я реализую протокол в моем RootViewController
, и все выглядит хорошо. Когда я его строю, появляется предупреждение
Класс 'ImageScrollView' не реализует протокол 'TapDetectingImageViewDelegate' ".
После проверки метода init
в классе ImageScrollView
я вижу, что self.delegate = self;
вызывает проблему. Я объявляю себя делегатом для UIScrollView
методов делегата, но я также являюсь делегатом для моего собственного протокола (делегат для моего протокола должен быть RootViewController
, а не ImageScrollView
).
- (id)initWithFrame:(CGRect)frame{
if ((self = [super initWithFrame:frame])) {
self.showsVerticalScrollIndicator = NO;
self.showsHorizontalScrollIndicator = NO;
self.bouncesZoom = YES;
self.decelerationRate = UIScrollViewDecelerationRateFast;
self.delegate = self;
}
return self;
}
Ребята, вы знаете, как я могу решить это? Или лучше сообщить моему RootViewController
, что пользователь нажал UIScrollView
/ UIImage
.
Объявление протокола в ImageScrollView.h
@protocol TapDetectingImageViewDelegate <NSObject>
@optional
- (void)tapDetectingImageView:(ImageScrollView *)view gotSingleTapAtPoint:(CGPoint)tapPoint;
@end
Заголовочный файл класса, который его реализует
#import <UIKit/UIKit.h>
#import "ImageScrollView.h"
@interface AppleScrollViewViewController : UIViewController <UIScrollViewDelegate, TapDetectingImageViewDelegate>{
UIScrollView *pagingScrollView;
}
-(void)configurePage:(ImageScrollView *)page forIndex:(NSUInteger)index;
- (CGRect)frameForPageAtIndex:(NSUInteger)index;
- (CGRect)frameForPagingScrollView;
- (UIImage *)imageAtIndex:(NSUInteger)index;
- (NSString *)imageNameAtIndex:(NSUInteger)index;
- (CGSize)imageSizeAtIndex:(NSUInteger)index;
- (NSArray *)imageData;
@end
Метод протокола в классе .m, который его реализует
-(void)tapDetectingImageView:(ImageScrollView *)view gotSingleTapAtPoint:(CGPoint)tapPoint{
NSLog(@"SingleTap");
}