Вопрос

Предпосылка удивительно проста: я хочу отобразить модальный вид в приложении iPad, который использует UISPLITVIVECONTROLLER.

Иерархия просмотра прямой вперед:

                                              /- TableViewController1
                     /- root:TabBarController -- TableViewController2
SplitViewController -
                     \- detail:CustomViewController

Когда я нажимаю на один из клеток в таблице в TableViewController1, я открываю модальный вид:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)ip {
  UIViewController *vc = [[MyModalClass alloc] init];
  UINavigationController *nc = [[UINavigationController alloc]
                                initWithRootViewController:vc];
  nc.modalPresentationStyle = UIModalPresentationFormSheet;
  nc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
  [self presentModalViewController:nc animated:true];
  [nc release];
  [vc release];
}

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

В ModalViewController следующий метод запускается UITabbarbutton в панели навигации:

- (void) closeButtonInNavBarWasClicked:(id)sender {
  [self dismissModalViewControllerAnimated:true];
}

И это где начинаются проблемы.

Когда этот код называется, модальный вид исчезает, но: TabBarController (Root View Split View) внезапно вращается и изменяется. Контент внезапно вбок и частично охватывает вид детали. Представление деталей не изменяется для меньшего размера, он просто частично покрыт корневым видом.

Единственная ситуация, когда эта проблема не отображается, - это когда я нажимаю на ячейку TableViewController1, когда приложение находится в портретном режиме. Несмотря на корневой вид, находящийся в поповете (который может быть достаточно источником ошибок), все работает нормально.

Некоторые вещи, которые я уже пробовал, без успеха:

  • Сбросьте полосу вкладки, просто отображайте TableViewController1 в качестве корневого контроллера сплит-вида
  • Создайте протокол делегата, чтобы родительский TableViewController1 отклонил модальный вид, а не сам вид MyModalClass.
  • Представление / отклонение модального взгляда на TableViewController1.splitviewController на самом деле делает все хуже: вид даже не появляется.
  • Пожертвование нескольких коз и не помогло.

Я бы очень оценил любой вклад по этому вопросу.

Это было полезно?

Решение

У меня есть своего рода ответ на свой собственный вопрос: я использовал инструменты для систематического устранения всех утечек памяти в моем приложении. Однажды я сделал это, проблема исчезла.

Другие советы

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

Таким образом, если VC1 отображает VC2 модули, и пользователь поворачивает VC2, я устанавливаю ориентацию VC1 в соответствии с текущей ориентацией VC2 путем вызова: UIInterfaceorientation Currentorientation = Self.interfaceSorentation; // хранить текущую ориентацию VC2 (модальный вид) [VC1 WilrotateTeTorfacterfactorientation: refortorientation Продолжительность: 0];

Затем я Dissmiss VC2 и в ViewWillAppear VC1 я делаю это:

- (пустота) ViewDiDiDAppear: (Bool) Animated {

[super viewDidAppear:animated];

/* Store wanted orientation */
UIInterfaceOrientation currentOrientation = self.interfaceOrientation; 

/* rotate to some arbitrary orientation, this solves the bug. */
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortraitUpsideDown animated:NO]; 

[[UIDevice currentDevice] setOrientation:currentOrientation animated:NO]; //restore wanted orientation.

}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top