почему выталкивание контроллера UINavigationController, вложенного в UISplitViewController, оживляет весь splitView? - PullRequest
1 голос
/ 15 декабря 2011

У меня есть приложение для iPad с UISplitViewController в нем (UsersSplitViewController).На левой стороне (ROOT) я установил UINavigationController (в то время как правая сторона используется для пользовательского представления).Контроллер навигации имеет иерархию из 2 контроллеров представлений (2 разных табличных представления).Пока я помещаю второй табличный вид в стек (выбирая строку в первом табличном представлении), все работает просто отлично: анимация состоит во втором скользящем табличном представлении, скользящем справа (по умолчанию).Однако, когда я касаюсь кнопки «Назад», когда отображается второй контроллер, вместо анимации только навигационного контроллера, весь SplitViewController анимируется (скользящий сверху экрана!).Очевидно, это уродливо, и только то, что я не хочу ... может ли кто-нибудь помочь?

Здесь все основные контроллеры устанавливаются (внутри AppDelegate):

usersSplitViewController=[[UISplitViewController alloc] init];
usersRootViewController=[[UsersRootViewController alloc] initWithDataSource:self];
usersRootViewController.dataSource=self;
usersRootViewController.appDelegate=self;
usersDetailViewController=[[UsersDetailViewController alloc] init];
usersDetailViewController.dataSource=self;
usersDetailViewController.appDelegate=self;
usersDetailViewController.urvc=usersRootViewController;
usersRootViewController.usersDetailViewController=usersDetailViewController;
usersSplitViewController.viewControllers=[NSArray arrayWithObjects:usersRootViewController,usersDetailViewController,nil];
usersSplitViewController.delegate=usersDetailViewController;
[usersRootViewController release];

вот где внутри UsersRootViewController (подкласс UINavigationController) я создаю экземпляры tableViews, которые должны быть показаны:

UITableViewController *userKindTableViewController=[[UITableViewController alloc] init];

//first tableView:
userKind=[[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];
userKind.dataSource=self;
userKind.delegate=self;

userKindTableViewController.tableView=userKind;
userKindTableViewController.contentSizeForViewInPopover=CGSizeMake(320.0, 200.0);
[self pushViewController:userKindTableViewController animated:NO];
[userKindTableViewController release];

//second tableView:
usersOfKindTableViewController =[[UITableViewController alloc] init];
usersOfKind=[[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
usersOfKind.dataSource=self;
usersOfKind.delegate=self;
usersOfKindTableViewController.tableView=usersOfKind;
usersOfKindTableViewController.contentSizeForViewInPopover=CGSizeMake(320.0, 600.0);

наконец, я нажимаю второй TableView в первом из них "didSelectRowAtIndexPath":

[self pushViewController:usersOfKindTableViewController animated:YES];

Спасибо

1 Ответ

3 голосов
/ 08 февраля 2012

Вам необходимо переопределить класс UITableViewController и реализовать метод

shouldAutorotateToInterfaceOrientation: 

, чтобы он возвращал YES для

UIInterfaceOrientationLandscapeLeft and UIInterfaceOrientationLandscapeRight

ориентаций. Затем используйте этот класс для userKindTableViewController и usersOfKindTableViewController переменные.

...