从应用程序中的故事板手动创建的视图控制器:didFinishLaunching 不响应触摸事件
Posted
技术标签:
【中文标题】从应用程序中的故事板手动创建的视图控制器:didFinishLaunching 不响应触摸事件【英文标题】:View controller created manually from a storyboard in application:didFinishLaunching does not respond to touch events 【发布时间】:2014-02-16 23:08:38 【问题描述】:我想在代码中手动创建我的故事板,而不是让它自动加载,所以我首先删除了 plist 中的启动故事板,如下所示:
在我的应用委托中使用这个:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController * initalViewController = [storyboard instantiateInitialViewController];
UIWindow *window = [[UIWindow alloc] init];
[window setRootViewController:initalViewController];
[window makeKeyAndVisible];
self.window = window;
return YES;
初始视图控制器正确加载并且可见,但是它没有获得任何触摸事件。我什至在 touchesBegan 上设置了一个断点。有谁知道为什么没有提供触摸?
【问题讨论】:
【参考方案1】:您创建的窗口没有框架,这意味着它实际上有一个0, 0, 0, 0
的框架。视图无法接收超出其父级范围的触摸,因此零帧时所有内容都超出了窗口范围。
你可能应该更新到这样的东西
UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
参见UIWindow 文档中的注释(强调我自己的)
注意: 当您使用故事板和 Xcode 应用程序模板创建应用程序时,会为您创建一个窗口。如果您选择在 Interface Builder 中创建窗口,请确保在属性检查器中选择“启动时全屏”选项,以便窗口大小适合当前设备。 由于窗口不会接收超出其边界的触摸事件,并且默认情况下视图不会被裁剪到窗口的边界,因此大小不正确的窗口可能无法将触摸事件传递给它的所有视图。
【讨论】:
以上是关于从应用程序中的故事板手动创建的视图控制器:didFinishLaunching 不响应触摸事件的主要内容,如果未能解决你的问题,请参考以下文章
从 AppDelegate 转到 navigationcontroller 故事板中的详细视图