Я пытаюсь реализовать горизонтальную прокрутку в UITextView.Я нашел здесь объясненное .
Однако я не понимаю, как я могу «подклассить» UITextView
.Код, который приведен и который я попытался реализовать, следующий:
@interface SwipeableTextView : UITextView {
}
@end
@implementation SwipeableTextView
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self.superview touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
[self.superview touchesMoved:touches withEvent:event];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
[self.superview touchesEnded:touches withEvent:event];
}
@end
Очевидно, это должно переопределить нормальный UITextView
, который я затем могу вызвать, ссылаясь на SwipeableTextView
(например, SwipeableTextView.text = @"Some Text";
).У меня вопрос, куда мне поместить этот кусок кода?В моем файле .m или .h?Я попытался поместить его под секцию реализации моего m-файла, но это не сработает, поскольку у меня уже есть секции @interface
и @implementation
.Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Это работает сейчас:
//
// SwipeTextView.h
// Swipes
//
#import <Foundation/Foundation.h>
@interface SwipeTextView : UITextView {
CGPoint gestureStartPoint;
}
@property CGPoint gestureStartPoint;
@end
M File
//
// SwipeTextView.m
// Swipes
//
#import "SwipeTextView.h"
#define kMinimumGestureLength 10
#define kMaximumVariance 5
@implementation SwipeTextView
@synthesize gestureStartPoint;
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
UITouch *touch =[touches anyObject];
gestureStartPoint = [touch locationInView:self.superview];
[self.superview touchesBegan:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
[self.superview touchesMoved:touches withEvent:event];
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.superview];
CGFloat deltaXX = (gestureStartPoint.x - currentPosition.x); // positive = left, negative = right
//CGFloat deltaYY = (gestureStartPoint.y - currentPosition.y); // positive = up, negative = down
CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x); // will always be positive
CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y); // will always be positive
if (deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance) {
if (deltaXX > 0) {
NSLog (@"Horizontal Left swipe detected");
}
else {
NSLog(@"Horizontal Right swipe detected");
}
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesEnded:touches withEvent:event];
[self.superview touchesEnded:touches withEvent:event];
}
@end
И, наконец, вот как ясоздайте подкласс этого пользовательского UITextView в моем ViewController:
// UITextView
CGRect aFrame = CGRectMake(0, 100, 320, 200);
aSwipeTextView = [[SwipeTextView alloc] initWithFrame:aFrame];
aSwipeTextView.text = @"Some sample text. Some sample text. Some sample text.";
[self.view addSubview:aSwipeTextView];