为iPhone定制选项卡栏,实现横竖屏切换时选项卡的变化。

5
我正在制作一个选项卡应用,希望不仅在底部有自定义的栏,还可以根据用户处于横屏或竖屏模式来更改按钮。

例如:用户垂直持有iPhone,显示3个标签(a,b,c),但是用户将手机翻转到侧面,选项卡现在显示2个标签(d,e),并且在屏幕左侧垂直排列以便用户阅读。

我已经研究了子类化UITabBarController类,但感觉无法实现我的需求。我想知道...

1)我该如何实现这一点?
2)自制选项卡是否会在将应用程序推送到App Store时出现问题?


你有没有想过如何在横屏模式下垂直地将选项卡放在屏幕左侧?我正在尝试自己实现这个功能。 - NickDK
2个回答

1

我认为根据你描述的实现应该不会成为一个问题,只要你的实现不会让用户感到困惑,并且不会“破坏”标准的选项卡行为。换句话说,如果它看起来像一个标准的苹果控件或者类似,它应该以非常相似的方式工作,对于熟悉选项卡的用户来说不会出现“破损”的表现。苹果允许你在用户界面控件方面有一些自由和创造性,只要你小心地避免让用户感到困惑或者烦恼。

至于你的实现,继承UITabBarController可能不是一个很好的方法,我同意。为了实现你的自定义选项卡栏,可以借鉴苹果的做法,编写一个UIViewController的子类来实现你所描述的功能,基于UITabBarController的工作原理(但是避免实际使用苹果的UITabBarController)。

你的自定义选项卡控制器(我们方便起见称之为CustomTabBarController)应该基本上接收一组UIViewController、图标和横向和纵向模式下的描述文本。你需要在CustomTabBarController中检测旋转事件,并将其传递给当前显示的实际UIViewController,并进行其他的连接,例如传递viewDidAppear消息等。

一个很好的灵感和提示来源可能是查看其他人对UIViewController聚合器的实现。例如:

http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad


使用子类化UIViewController进行+1。选择/取消选择“选项卡”的逻辑并相应地加载视图控制器并不太复杂。从一个视图控制器数组(就像UITabBarController一样)开始,将其与选项卡栏索引匹配并开始操作。在名为“Gift Plan”的应用程序中有一个可爱的自定义选项卡栏示例。 - Rog
@Rog 谢谢Rog,我不知道有礼物计划应用程序。 - occulus

0

非常好的建议!不幸的是,我不相信自己能够正确地实现所有这些..我只学习了6个月的Objective-C编程。但我发现并成功使用了以下链接,我认为其他人也会觉得有用:

http://idevrecipes.com/2010/12/17/twitter-app-tab-bar-animation/

这里的人们使用自己定制的标签栏,非常不错。这使我能够即时编辑标签栏上存在的按钮数量、相应按钮的图像以及标签栏本身的高度。此外,我还使用了一个通知监听器来监听包含我的标签栏的视图控制器类,以便在用户翻转 iPhone 时设置不同的标签栏并重新加载新的项目/视图控制器。
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];

为了解决方向差异,我只需将出现在选项卡栏上的图像翻转90度,无论其翻转的方式如何,因此我将栏目上的项目设置为可能的4种不同方式。
谢谢你的建议。如果我勇敢一点,我可能会尝试自己编写自定义选项卡栏代码!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接