为啥弹出嵌套在 UISplitViewController 中的 UINavigationController 的控制器会为整个 splitView 设置动画?
Posted
技术标签:
【中文标题】为啥弹出嵌套在 UISplitViewController 中的 UINavigationController 的控制器会为整个 splitView 设置动画?【英文标题】:why popping a controller of a UINavigationController nested in a UISplitViewController animates the whole splitView?为什么弹出嵌套在 UISplitViewController 中的 UINavigationController 的控制器会为整个 splitView 设置动画? 【发布时间】:2011-12-15 10:15:04 【问题描述】:我有一个适用于 iPad 的应用程序,其中包含 UISplitViewController (UsersSplitViewController)。在它的左侧(ROOT),我安装了一个 UINavigationController(而右侧用于自定义视图)。 Navigation Controller 具有 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);
最后,我将第二个 TableView 推送到第一个的“didSelectRowAtIndexPath”中:
[self pushViewController:usersOfKindTableViewController animated:YES];
谢谢
【问题讨论】:
【参考方案1】:您需要覆盖UITableViewController
类并实现
shouldAutorotateToInterfaceOrientation:
方法,使其返回 YES
UIInterfaceOrientationLandscapeLeft and UIInterfaceOrientationLandscapeRight
orientations。然后将此类用于您的userKindTableViewController
和usersOfKindTableViewController
变量。
【讨论】:
以上是关于为啥弹出嵌套在 UISplitViewController 中的 UINavigationController 的控制器会为整个 splitView 设置动画?的主要内容,如果未能解决你的问题,请参考以下文章