仅自动旋转 UITabBar 内的一些选项卡? (iOS 5)
Posted
技术标签:
【中文标题】仅自动旋转 UITabBar 内的一些选项卡? (iOS 5)【英文标题】:Autorotating only some of the tabs inside a UITabBar? (ios 5) 【发布时间】:2012-04-12 15:48:49 【问题描述】:我有一个带有 5 个标签的 UITabBar。我只希望为 UIViewController 启用自动旋转,该 UIViewController 被推送到选项卡 #3 深处的堆栈中。所以要清楚:点击 UITabBar item 3,你会得到 tabbar item #3 的根 UIView,它不应该自动旋转。点击并将另一个 UIViewController 推入堆栈(通过 UINavigationController)。再次点击,将另一个 UIViewController 推入堆栈。只有在这里这个 UIView 才能自动旋转。
其他 4 个选项卡根本不应旋转 - 选项卡的根视图或选项卡的任何子视图都不应旋转。
谁能告诉我应该使用什么方法?我读到每个选项卡都需要对 willAutorotateToInterfaceOrientation 响应“是”。
【问题讨论】:
查看***.com/questions/2731136/… 【参考方案1】:在每个视图的shouldAutorotate...
中,您可以调用根视图控制器中的方法来检查当前显示的内容。如果选项卡 3 的深层视图正在显示,它将返回 YES,否则返回 NO,并且视图将依次返回相同的值。
编辑——根据 user798719 的要求提供更多详细信息:
您的根视图控制器知道显示的是哪个视图。您将一个方法添加到根视图控制器- (BOOL) isDeepLevelTab3Displayed;
。该方法检查选项卡 3 的深层视图是否正在显示,如果是,则返回 YES,否则返回 NO。
每个子视图控制器的shouldAutorotate…
方法都会获得根控制器的引用,以便它可以调用isDeepLevelTab3Displayed.
如果你使用的是导航风格的控制器,你可以像这样获取 ref(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)
希望对您有所帮助。 但要以批判的眼光评估这个添加的细节;我使用过自动旋转,但还没有使用导航控制器。
【讨论】:
您好,感谢您的帮助。你介意为我详细解释一下吗?我还是有点不清楚。 感谢您提供的精彩细节。这对我们所有人都非常有帮助。谢谢!以上是关于仅自动旋转 UITabBar 内的一些选项卡? (iOS 5)的主要内容,如果未能解决你的问题,请参考以下文章
UITabBar 内的单个 UIViewController 自动旋转
来自 UITabBar 的奇怪行为,其中背景颜色仅显示一个选项卡
如何不让按钮仅在 UITabBar 的 5 个选项卡中的 3 个中显示 UINavigationBar?