为什么弹出嵌套在UISplitViewController中的UINavigationController的控制器会动画整个splitView?

时间:2011-12-15 10:15:04

标签: ios cocoa-touch ipad uinavigationcontroller uisplitviewcontroller

我有一个iPad应用程序,其中包含UISplitViewController(UsersSplitViewController)。在它的左侧(ROOT)我安装了一个UINavigationController(右侧用于自定义视图)。 导航控制器具有2个视图控制器的层次结构(2个不同的tableViews)。只要我在堆栈上推送第二个tableView(通过在第一个tableview中选择一行),一切正常:动画包含从右侧滑入的第二个tableview(默认)。但是,当我在显示第二个控制器时触摸后退按钮,而不是仅仅为navigationController设置动画,整个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);

最后,我在第一个“didSelectRowAtIndexPath”中推送第二个TableView:

[self pushViewController:usersOfKindTableViewController animated:YES];

由于

1 个答案:

答案 0 :(得分:3)

您需要覆盖UITableViewController类并实现

shouldAutorotateToInterfaceOrientation: 

方法,以便为

返回YES
UIInterfaceOrientationLandscapeLeft and UIInterfaceOrientationLandscapeRight

orientationations.Then将此类用于userKindTableViewControllerusersOfKindTableViewController变量。