2)自制选项卡是否会在将应用程序推送到App Store时出现问题?
我认为根据你描述的实现应该不会成为一个问题,只要你的实现不会让用户感到困惑,并且不会“破坏”标准的选项卡行为。换句话说,如果它看起来像一个标准的苹果控件或者类似,它应该以非常相似的方式工作,对于熟悉选项卡的用户来说不会出现“破损”的表现。苹果允许你在用户界面控件方面有一些自由和创造性,只要你小心地避免让用户感到困惑或者烦恼。
至于你的实现,继承UITabBarController可能不是一个很好的方法,我同意。为了实现你的自定义选项卡栏,可以借鉴苹果的做法,编写一个UIViewController的子类来实现你所描述的功能,基于UITabBarController的工作原理(但是避免实际使用苹果的UITabBarController)。
你的自定义选项卡控制器(我们方便起见称之为CustomTabBarController)应该基本上接收一组UIViewController、图标和横向和纵向模式下的描述文本。你需要在CustomTabBarController中检测旋转事件,并将其传递给当前显示的实际UIViewController,并进行其他的连接,例如传递viewDidAppear消息等。
一个很好的灵感和提示来源可能是查看其他人对UIViewController聚合器的实现。例如:
http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad
非常好的建议!不幸的是,我不相信自己能够正确地实现所有这些..我只学习了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];