我有一个带有多个标签的标签栏应用程序,所有这些都没有问题。每个标签都会转到一个新页面并打开一个新视图。
我想要做的是添加一个不会打开新页面或新的viewcontroller的选项卡,但会在当前页面的顶部弹出一个选择器视图。然后从该选择器中选择一个选项将跳转到新视图。
所以在选项卡中:
第1页/第2页/第3页/选择器
前3个标签中的任何一个都会立即跳转到新页面。第4个选项卡打开选择器,其中包含第4页/第5页/等选项,然后选择其中一个然后转到该页面。
如果您取消选择器视图,该应用程序将保留在当前页面/选项卡上。
这在技术上是否可行,Apple指南中是否允许这样做?
答案 0 :(得分:4)
您需要继承UITabBarController,并实现此方法:
- (BOOL)tabBarController:(UITabBarController *)tbController shouldSelectViewController:(UIViewController *)viewController
{
NSInteger tabIndex = [[tbController viewControllers] indexOfObject:viewController];
//Check to see if the selected index is the one you want to do something else, in this example, it's the second tab, so index is 1
if(tabIndex == 1)
{
//Write the code you need to pop up the picker here.
return false;
}
return true;
}
这样可以防止标签栏实际显示新的视图控制器,而是可以对其进行编码以执行任何操作。请注意,即使您永远不会查看该选项卡,您仍然必须拥有该选项卡的某种占位符视图控制器。它只需要占有一个位置,因此标签栏控制器知道它需要有一个标签。
答案 1 :(得分:2)
首先,关于Apple指南,这是允许的,因为您可以决定应用程序是否应该在用户点击UITabBarItem时加载新的视图控制器,但是当用户点击UITabBarItem时显示UIPickerView是不直观的不符合苹果UI模式。基本上,标签栏项目用于显示应用程序的最重要功能,我认为Piker视图不是其中之一。
但是如果你不关心苹果UI模式(这不是正确:)))你可以使用darkfoxmrd
发布的方法。