我最近遇到了一个问题,即无法touchesMoved
从UIScrollView
. 在与很多人交谈并阅读了大量帖子之后,事实证明它UIScrollView
本身不接受触摸,而是需要将触摸传递给UIScrollView
子类。
我对objective-c非常陌生,并且在思考如何定义子类(在单独的.h / .m文件中或以某种方式在@interface或其他东西中)以及iOS如何处理响应者链时,我感到很痛苦.
请让我描述一下我的确切情况,任何愿意解释我需要在 noob-speak 中做什么的人都会非常感激。
我的应用程序中有一个页面,我将它的默认设置更改UIView
为UIScrollView
,所以如果我检查它,InterfaceBuidler
我看到的只是我的SampleViewController
and UIScrollView
。我把我的链接UIScrollView
到这样的:@Interface
SampleViewControler.h
#import <UIKit/UIKit.h>
@interface SampleViewController : UIViewController
{
}
@property (strong, nonatomic) IBOutlet UIScrollView *mainScroller;
@end
我这样引用了我UIScrollView
的SampleViewController.m
:
#import "SampleViewController.h"
@interface SampleViewController ()
@end
@implementation SampleViewController
@synthesize mainScroller = _mainScroller;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Movement!");
}
-(void)viewWillAppear:(BOOL)animated
{
[_mainScroller setContentOffset:CGPointMake(0,0) animated:YES];
}
如果我将类更改UIScrollView
为UIView
,则检测到触摸并发出一些NSLog
消息。但是,一旦UIView
设置回UIScrollView
,触摸将被忽略。
据我了解,我需要UIScrollView
使用代码设置一个子类:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Movement!");
}
...然后将我的 SampleViewController.m 更改为具有代码:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[[self.nextResponder nextResponder] touchesMoved:touches withEvent:event];
}
但是,我真的不明白 1)如何设置这样的子类,以及 2)为什么这会起作用,因为我不明白为什么[[self.nextResponder nextResponder] touchesMoved:touches withEvent:event];
会首先从内部调用SampleViewController.m
,因为我的类似NSLog(@"Movement!");
语句从未执行过.
我已经尝试了我能找到的所有教程,并且正在转向 SE 的专业知识!谢谢。