0

我创建了一个准系统 iOS 应用程序,它向窗口添加了一个 UIScrollView(没有 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 对象,添加到窗口中,然后尝试将其设置为第一响应者:

#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 对象报告为第一响应者。我确定我错过了一些非常简单的东西,对吧?

4

1 回答 1

0

在您的示例中,您没有将滚动视图添加到任何超级视图。尝试[self.window addSubview: myScrollView];在调用之前添加此行becomeFirstResponder

上的文件becomeFirstResponder指出

您可以调用此方法以使响应者对象(例如视图)成为第一响应者。但是,如果它是视图层次结构的一部分,您应该只在该视图上调用它。如果视图的 window 属性包含一个 UIWindow 对象,则它已安装在视图层次结构中;如果它返回 nil,则视图与任何层次结构分离。

于 2013-02-11T17:55:44.507 回答