Просмотр контроллера, созданного вручную из раскадровки в приложении:didFinishLaunching не реагирует на сенсорные события
Я хочу создать свою раскадровку вручную в коде, а не загружать ее автоматически, поэтому сначала я удалил раскадровку запуска в списке:
С этим в моем приложении делегат:
- (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;
}
Начальный контроллер представления загружается правильно и является видимым, однако он не получает никаких событий касания. Я даже установил точку останова на прикосновениях Began. Кто-нибудь знает, почему не доставляются штрихи?
1 ответ
Вы создали окно без рамки, что будет означать, что оно на самом деле имеет рамку {{0, 0}, {0, 0}}
, Представления не могут получать прикосновения, которые находятся за пределами родительских границ, поэтому с нулевым кадром все выходит за пределы окон.
Вы, вероятно, должны обновить что-то вроде этого
UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
См. Примечание к документам UIWindow (выделите мое)
Примечание:
Когда вы используете раскадровки и шаблоны приложений XCode для создания приложения, для вас создается окно. Если вы решите создать окно в Интерфейсном Разработчике, обязательно выберите опцию Полноэкранный режим при запуске в Инспекторе атрибутов, чтобы размер окна соответствовал текущему устройству. Поскольку окно не получает события касания за пределами своих границ, и представления по умолчанию не обрезаются до границ окна, окно неправильного размера может не иметь возможности доставлять события касания всем его представлениям.