Выборочная авторотация в UINavigationController и UITabBarController

Вы просто не можете быть уверены в системе Unix, что .txt файл действительно является текстовым файлом. Ваш лучший выбор состоит в том, чтобы использовать "файл". Возможно, попытайтесь использовать:

file -ib "$file"

Тогда можно использовать список типов MIME, чтобы соответствовать против или проанализировать первую часть MIME, где Вы получаете материал как "текст", "приложение", и т.д.

5
задан Community 23 May 2017 в 11:52
поделиться

1 ответ

Ага - это было проще, чем я думал!

Верно, панели вкладок не видно ... но по сути это панель вкладок

Если UITabBarController не разрешает авторотацию, все ставки отключены для любых других представлений. Итак, это просто вопрос подкласса UITabBarController и соответствующего ответа на shouldAutorotateToInterfaceOrientation: (вместо того, чтобы сделать его частью делегата приложения, как это делает Xcode по умолчанию).

сделай это? Рад, что ты спросил. Следуйте этим шагам, только если вы создали приложение контроллера панели вкладок, используя настройки Xcode по умолчанию. ( РЕЗЕРВНОЕ КОПИРОВАНИЕ вашей работы, прежде чем пробовать это! Заявление об отказе от ответственности, yadda yadda.)

  1. Создайте новый подкласс UIViewController (мы назовем его VC). Сделайте его подклассом UITabBarController с явным делегатом UITabBarControllerDelegate .
  2. Переместите все биты делегата панели вкладок из вашего делегата приложения в этот новый VC.
  3. В методе viewDidLoad вашего нового виртуального канала добавьте self.delegate = self; в конец.
  4. В MainWindow.xib (или где угодно, где ваш контроллер панели вкладок и панель вкладок определены), выберите объект Контроллер панели вкладок и перейдите в Инспектор удостоверений ( Cmd-4 ). Измените класс на свой новый VC вместо стандартного класса UITabBarController .

Теперь мы в деле. Просто добавьте это в новый источник VC:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES; // Adjust to taste
}

Почему делегат? Владелец файла IB - UIApplication , и я не мог Я привязываю делегата к моему новому VC через IB. Поскольку мне нужна возможность отвечать на методы делегата, я добавил ее явно. Если вам это не нужно, можно не указывать. (Если это можно сделать в IB, пожалуйста, свяжитесь с нами!)

Единственная оставшаяся уловка - это выборочно установить ДА . Возможно, вы не захотите постоянно поддерживать авторотацию (как в моем случае). Вот как я это делаю. Во-первых, я изменяю этот недавно добавленный метод (сверху) ... на этот:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {   
    return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

Теперь я могу ответить на этот же метод из любого из моих виртуальных каналов приложения, и он перейдет к контроллеру панели вкладок! Например, в моем приложении у меня есть виртуальный канал, который я хочу отображать только в портретной ориентации, поэтому я отвечаю так:

return (interfaceOrientation == UIInterfaceOrientationPortrait);

Однако этот же виртуальный канал может перенаправить пользователя в фотогалерею, для чего я делаю хотят разрешить вращение. В этом методе авторотации VC я отвечаю по-другому:

return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

Теперь вид галереи разрешает авторотацию для всех ориентаций, кроме перевернутой портретной, плюс, когда я возвращаюсь вверх по цепочке контроллеров вида, ориентация возвращается к портретной. :)

5
ответ дан 18 December 2019 в 08:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: