我创建了一个准系统iOS应用程序,它将一个UIScrollView添加到Window(没有ViewControllers或UIViews - 我只是这样做,看看我是否能理解发生了什么。)
我想要的只是在设备被动摇时通知UIScrollView。
我已经将UIScrollView子类化以实现canBecomeFirstResponder方法:
#import "SampleScrollView.h"
@implementation SampleScrollView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
在我的AppDelegate中,我创建了一个SampleScrollView对象,添加到Window,然后尝试将其设置为第一响应者:
#import "SampleScrollView.h"
@implementation ResponderTestAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
CGRect thisFrame = [[self window] bounds];
SampleScrollView *myScrollView = [[SampleScrollView alloc] initWithFrame:thisFrame];
// Set scrollview to be the first responder
BOOL success = [myScrollView becomeFirstResponder];
if (success)
{
NSLog(@"myScrollView is first responder");
}
else
{
NSLog(@"Not first responder.");
}
这是一个高度简化的示例,但由于某种原因,我无法让应用程序将SampleScrollView对象报告为第一响应者。我确定我错过了一些非常简单的事情,对吗?
答案 0 :(得分:0)
在您的示例中,您没有将滚动视图添加到任何超级视图。尝试在调用[self.window addSubview: myScrollView];
之前添加此行becomeFirstResponder
。
becomeFirstResponder
上的文档说明了
您可以调用此方法来创建响应者对象,例如查看第一响应者。但是,如果它是视图层次结构的一部分,则只应在该视图上调用它。如果视图的window属性包含UIWindow对象,则它已安装在视图层次结构中;如果它返回nil,则视图将从任何层次结构中分离。