Просмотр контроллера, созданного вручную из раскадровки в приложении: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 для создания приложения, для вас создается окно. Если вы решите создать окно в Интерфейсном Разработчике, обязательно выберите опцию Полноэкранный режим при запуске в Инспекторе атрибутов, чтобы размер окна соответствовал текущему устройству. Поскольку окно не получает события касания за пределами своих границ, и представления по умолчанию не обрезаются до границ окна, окно неправильного размера может не иметь возможности доставлять события касания всем его представлениям.

Другие вопросы по тегам