Как открыть контроллер вида в ландшафтном режиме?

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; PriceChart *vc = [storyboard instantiateViewControllerWithIdentifier:@"pricechart"]; [self.navigationController pushViewController:vc animated:YES]; } 

Теперь мой вопрос: контроллер представления, который я собираюсь показать, должен быть в режиме ландшафтного ландшафта, но он находится в режиме портретной ориентации.

Другой вопрос заключается в том, как открыть разные контроллеры представлений, когда используется другая ячейка. Я попробовал это с помощью indexpath.row но есть ли другой способ использования storyboard ?

Вот как вы можете заставить пейзаж

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } -(BOOL)shouldAutorotate { return NO; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } 

В классе, который находится в ландшафтном режиме:

 - (NSUInteger)supportedInterfaceOrientations { // return orientation that you want //return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskPortraitUpsideDown; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return YES; //return UIInterfaceOrientationIsPortrait(toInterfaceOrientation); } 

Если вы используете UINavigationController, вы должны наследовать свой навигационный контроллер от UINavigationController и реализовать

 - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return [[self.viewControllers lastObject] supportedInterfaceOrientations]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return [[self.viewControllers lastObject] shouldAutorotateToInterfaceOrientation:toInterfaceOrientation]; } 

Попробуйте это. Это демо решило мою проблему …

https://github.com/alloy/ForceOrientationTest

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

Что касается второго вопроса, просто заполните UITableViewController либо статическими ячейками, либо динамическими ячейками прототипа. Затем контролируйте + перетаскивание из ячейки в другой контроллер представления в вашем раскадровке. У вас будут те же действия Push / Modal / Custom, которые отображаются для кнопок.

 shouldAutorotate, supportedInterfaceOrientations, preferredInterfaceOrientationForPresentation 

Вышеуказанные методы не вызываются из UIViewController если они находятся внутри любого UINavigationController . Если эти методы объявлены внутри UINavigationController они будут вызваны.

Для решения этого класса класс позволяет назвать его OrientationEnabledNavigation , это подкласс UINavigationController . Затем реализовано shouldAutorotate, supportedInterfaceOrientations, preferredInterfaceOrientationForPresentation методы внутри OrientationEnabledNavigation .

OrientationEnabledNavigation.h

 #import <UIKit/UIKit.h> @interface OrientationEnabledNavigation : UINavigationController @end 

OrientationEnabledNavigation.m

 #import "OrientationEnabledNavigation.h" @interface OrientationEnabledNavigation () @end @implementation OrientationEnabledNavigation - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. } - (BOOL)shouldAutorotate { return [self.topViewController shouldAutorotate]; // return NO; } - (NSUInteger)supportedInterfaceOrientations { return [self.topViewController supportedInterfaceOrientations]; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [self.topViewController preferredInterfaceOrientationForPresentation]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

Затем, если вы хотите использовать контроллер навигации в своем проекте, используйте OrientationEnabledNavigation . После этого, если вы реализуете shouldAutorotate, supportedInterfaceOrientations, preferredInterfaceOrientationForPresentation эти методы внутри вашего viewcontroller, то они будут вызваны.

В вашем представлении контроллер реализует следующие:

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } -(BOOL)shouldAutorotate { return NO; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } 

Другим способом является добавление некоторого кода в начало вашего делегата приложения:

Для UITabBarController

 @implementation UITabBarController (AutoRotationForwarding) -(BOOL)shouldAutorotate { if ([self.selectedViewController respondsToSelector:@selector(shouldAutorotate)]) { return [self.selectedViewController shouldAutorotate]; } else { return YES; } } - (NSUInteger)supportedInterfaceOrientations { if ([self.selectedViewController respondsToSelector:@selector(supportedInterfaceOrientations)]) { return [self.selectedViewController supportedInterfaceOrientations]; } else { return UIInterfaceOrientationMaskAll; } } @end 

Для UINavigationController

 @implementation UINavigationController (AutoRotationForwarding) -(BOOL)shouldAutorotate { if ([self.topViewController respondsToSelector:@selector(shouldAutorotate)]) { return [self.topViewController shouldAutorotate]; } else { return YES; } } -(NSUInteger) supportedInterfaceOrientations { if([self.topViewController respondsToSelector:@selector(supportedInterfaceOrientations)]) { return [self.topViewController supportedInterfaceOrientations]; } return UIInterfaceOrientationMaskPortrait; } @end 

Надеюсь это поможет.. 🙂

  • Изменение проблемы VC в Swift. Как передавать данные между представлениями в контроллере панели вкладок?
  • как увеличить или уменьшить масштаб в uipageviewcontroller?
  • CGAffineTransform - CGPoint в CGRect
  • Представление UIDatePicker модально
  • Объяснение различия между автоматическиAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars, edgeForExtendedLayout в iOS7
  • Шаблон проектирования MVC. Как View подходит?
  • Позиционирование UIViewControllers в UIScrollView бок о бок
  • Как убрать стопку модальных контроллеров представления с анимацией без мигания на экране любого из представленных VC между верхним и нижним?
  • Навигационная панель не видна при ручной смене
  • Поддержка как авторизованных iOS 6, так и iOS 5
  • Добавьте кнопку «Готово», чтобы отклонить программно созданный UIViewController
  • Interesting Posts

    UIAppearance setTranslucent error: тип нелегального свойства, c для средства определения видимости, _installAppearanceSwizzleForSetter

    Наложение цветной смеси в OpenGL ES / iOS / Cocos2d

    Выполните Segue из UICollectionViewCell Button, отличную от Cell Click

    Типы PList? Тип применения / x-plist

    Анимация UICollectionView (вставка / удаление элементов)

    преобразование gps-координат в слово opengl в AR

    UITextView Keyboard с клавиатуройAccessoryView становится синим (инвертируется) после трамплина

    Настройка содержимого содержимого UITableView через раскадровку в Xcode 6

    Этот бинарный файл, похоже, не был построен с помощью Apple Linker

    Связаны ли NSURLConnections с моей моделью или контроллером?

    Wkwebview – последний посещенный экран

    Открыть рулон камеры на точной фотографии

    cocos2d, начиная частицы с определенного времени в будущем

    Apple Mach-O Linker Errors (20) – Неопределенные символы для архитектуры armv7

    Ссылка на приложение iOS Facebook – откройте сайт, если приложение не установлено, откройте приложение, иначе

    Давайте будем гением компьютера.