Различные требования ViewController для автоматического поворота - PullRequest
1 голос
/ 28 апреля 2011

У меня есть пара представлений, управляемых их собственными контроллерами, некоторые из них вложенные.Я хотел бы поддержать вращение, некоторые виды могут поворачиваться в любую ориентацию, некоторые только в одну из портретных ориентаций (нормальная или перевернутая).

В моем случае мне нужно реализовать -shouldAutorotateToInterfaceOrientation вмой rootController, чтобы позволить вращение для любого из подпредставлений.Проблема в том, что rootController не знает, следует ли ему разрешить вращение, потому что он должен задать это контроллеру subviews.

В моем -Controller'е -shouldAutorotateToInterfaceOrientation я мог бы сделать что-то вроде:

return [self.settingsController shouldAutorotateToInterfaceOrientation];

обеспечить необходимую логику вращения, но будет ли это правильным способом сделать это?Я прочитал документ Apple о ротации , но это не очень понравилось.

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Для дальнейшего использования я отвечу на свой вопрос.

Моя проблема заключалась в том, что у меня были вложенные viewControllers и я отображал представление подуровня viewController, вызывая что-то вроде:

self.view = _subLevelViewController.view;

или

[self.view addSubview:_subLevelViewController.view];

Очевидно, что вложение viewController, как это не то, что Apple намеревается сделать.

Вы должны придерживаться 1 "root viewController", и вы должны отображать другие viewController, используяметоды, такие как:

[self presentModalViewController:_subLevelViewController animated:YES];

Больше информации по теме и очень хорошее чтение:http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/

0 голосов
/ 23 марта 2012

Я нашел этот пост и ссылочный блог самым кратким руководством по работе с вложенными контроллерами представления. Стоит обновить:

// "self" is the root view controller.
if ([self respondsToSelector:@selector(presentViewController:animated:completion:)])
    // The following is not available until iPhone 5.0:
    [self presentViewController:self.subViewController animated:YES completion:NULL];
else 
    // For iOS 4.3 and earlier, use this (deprecated in 5.0):
    [self presentModalViewController:self.subViewController animated:YES];

Я оставил здесь значение null, но учтите, что новый метод позволяет отправлять встроенную функцию через параметр completion:. Для класса ref он будет вызываться после запуска viewDidAppear: subViewController.

...