只能自动旋转UITabBar中的一些选项卡? (iOS 5)
我有一个UITabBar 5个选项卡。我只希望为一个UIViewController启用自动旋转功能,这个UIViewController被深入到选项卡#3的深处。所以要清楚:点击UITabBar项目3,并获得不应该自动旋转的标签栏项目#3的根UIView。点击并获取另一个UIViewController压入堆栈(通过UINavigationController)。再次点击,并将另一个UIViewController推入堆栈。只有在这里应该这个UIView autorotate。只能自动旋转UITabBar中的一些选项卡? (iOS 5)
其他4个选项卡根本不应旋转 - 不是选项卡的根视图,也不是选项卡的任何子视图。
有人能告诉我我应该使用什么方法吗?我读过每一个标签都需要对willAutorotateToInterfaceOrientation作出回答“是”。
在每个视图的shouldAutorotate...
中,您可以在根视图控制器中调用一个方法来检查当前正在显示的内容。如果显示选项卡3的深层视图,它将返回YES,否则返回NO,视图将返回相同。
编辑 - 每user798719的要求更详细地:
你的根视图控制器知道哪些视图在显示。您将一种方法添加到根视图控制器- (BOOL) isDeepLevelTab3Displayed;
。该方法检查是否显示选项卡3的深层视图,如果是,则返回YES,否则返回NO。
每个子视图控制器的shouldAutorotate…
方法将得到一个裁判根控制器,以便它可以调用isDeepLevelTab3Displayed.
如果您使用的是导航式控制器,可以得到这样的裁判(self
是子控制器):
NSArray *arrayOfControllers = [self viewControllers];
UIViewController *rootController = [arrayOfControllers objectAtIndex:0]; // per UIViewController class ref, root controller is at index 0
或者你可以得到什么在你的项目是这样的:
YourProjectAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UIViewController *rootController = appDelegate.rootController; // or appDelegate.intermediateClass1.intermClass2.rootController — however you set up your project
所以每个子控制器这样做:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
UIViewController *rootController = [[self viewControllers] objectAtIndex:0];
return [rootController isDeepLevelTab3Displayed];
}
因此,每子控制器将返回YES自转时应该发生,满足你提到你的问题的最终要求。
但是,如果您的所有子控制器都是UINavigationController的实例,则可以通过调用visibleViewController
直接确定当前正在显示哪个视图。那么你只需要一种检查其身份的方法。
你可以检查控制器的nibName
或title
,例如,对一个常数或整数属性intControllerIdentity
在控制器的initWithNibName…
整数属性的方案是最好的添加到您的所有控制器和设置这些参数,因为它赢得了如果您稍后更改nibName或标题,则不会受到影响。
你会添加常数一些类,其.h文件是由所有的控制器(或者,如果所有的控制器都是一样的类的实例,摆在那类的.h文件这些常量)进口:
#define kFooController 1
#define kBarController 2
#define kRotatableController 3
而且你会设置这样的:
self.intControllerIdentity = kRotatableController;
,并检查它是这样的:
if (self.intControllerIdentity == kRotatableController)
希望有所帮助。 但用评论眼睛评估这个增加的细节;我曾与自动旋转,但尚未与导航控制器。
+1有效选项 – Till 2012-04-12 16:01:41
嗨,谢谢你的帮帮我。你是否介意为我解释一下你的解释?我仍然有点不清楚。 – user798719 2012-04-12 16:35:57
当然。我编辑了答案以添加更多细节。 – Wienke 2012-04-12 18:26:49
检查此http://*.com/questions/2731136/view-controllers-inside-tab-bar-controller-not-auto-resizing-on-rotation – mChopsey 2012-04-12 16:03:49