Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义TabBarController功能_Ios_Ios6_Uitabbarcontroller_Custom Controls - Fatal编程技术网

Ios 自定义TabBarController功能

Ios 自定义TabBarController功能,ios,ios6,uitabbarcontroller,custom-controls,Ios,Ios6,Uitabbarcontroller,Custom Controls,我正在尝试使用以下选项创建自定义选项卡栏控制器: 喂 地图 新的 摄像机 搜寻 feed、map、camera和search将分别启动各自的VC,而new则更像是一个功能按钮。按下新选项卡项时,应显示地图视图,地图应开始记录用户的位置。我正试图使用uitabarcontroller来管理这些视图,但我似乎不知道如何使用“新建”选项卡实现我想要的功能。似乎我需要为“新建”记录和停止功能实现一个单独的视图控制器,但这似乎并不正确 录制/停止的功能应该类似于snapchat的红色大按钮,当您按下它时,

我正在尝试使用以下选项创建自定义选项卡栏控制器:

  • 地图
  • 新的
  • 摄像机
  • 搜寻
  • feed、map、camera和search将分别启动各自的VC,而new则更像是一个功能按钮。按下新选项卡项时,应显示地图视图,地图应开始记录用户的位置。我正试图使用
    uitabarcontroller
    来管理这些视图,但我似乎不知道如何使用“新建”选项卡实现我想要的功能。似乎我需要为“新建”记录和停止功能实现一个单独的视图控制器,但这似乎并不正确


    录制/停止的功能应该类似于snapchat的红色大按钮,当您按下它时,它会拍照

    我认为您必须自己实现容器视图控制器。我认为您不能使用UITabBarController来实现这一点。

    我认为您必须自己实现容器视图控制器。我想你不能用UITabBarController来做这件事。

    虽然我同意的是,这是一个糟糕的用户体验,但如果你从技术上想做的话,你可以将UITabBarController子类化,然后在
    viewDidLoad
    中,你可以将
    UIButton
    子视图添加到选项卡栏控制器的
    tabBar

    [self.tabBar addSubview:yourCustomButton];
    
    因此,这个按钮可以有自己的操作和选择器来做任何你想做的事情

    以一个例子来看。

    虽然我同意的是,这是一个糟糕的用户体验,但如果您在技术上想这样做,您可以将
    UITabBarController
    子类化,并且在
    viewDidLoad
    中,您可以将
    UIButton
    子视图添加到选项卡栏控制器的
    tabBar

    [self.tabBar addSubview:yourCustomButton];
    
    因此,这个按钮可以有自己的操作和选择器来做任何你想做的事情


    请看一个例子。

    我本打算挖掘shawnwall指出的idevrecipes示例,但有另一个可能的答案,假设您希望新按钮与标准UITabBarButton外观匹配。我同意它可能不是最好的UI,但它是可行的

    对于初学者,可以为新项创建虚拟视图控制器。我不是说你应该复制“地图”控制器或任何东西,我只是说创建一个空的视图控制器并将其(或其位置)隐藏在属性中。假设您在
    应用程序:didFinishLaunchingWithOptions:
    中创建选项卡栏,它看起来像这样

    self.newViewController = [[UIViewController alloc] init];
    self.newViewController.title = NSLocalizedString(@"New", nil);
    self.newViewController.image = [UIImage imageNamed:"new.png"];
    
    将该视图控制器放置在选项卡栏控制器的
    viewControllers
    属性中的适当位置

    保存对贴图控制器的引用,方法与为虚拟新控制器保存引用的方法相同

    如果您尚未完成do,请将tabBarController的委托设置为应用程序委托。您可能需要声明您的应用程序委托符合
    UITABBARCONTROLLEDELEGATE

    uitabardelegate
    提供了一些钩子,用于跟踪选项卡栏的更改
    tabBarController:shouldSelectViewController:
    看起来是我们为您的所需行为提供支持的合适场所

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
    {
        if ([viewController isEqual:self.newViewController]) {
            self.tabBarController.selectedViewController = self.mapViewController;
            // Whatever logic you need to start the recording
            return NO;
        }
    
        return YES;
    }
    

    用户交互的外观有点奇怪-用户标记中间的项目(新),但左侧的项目(地图)被选中。如果您想要“tab bar triggers behavior”操作,我会选择idevrecipes路线,使按钮在视觉上清晰可见。不过,如果你喜欢选项卡栏项外观,我相信这就是你要实现它的方式。

    我本来想挖掘shawnwall指出的idevrecipes示例,但有另一个可能的答案,假设你希望新按钮与标准UITabbutton外观匹配。我同意它可能不是最好的UI,但它是可行的

    对于初学者,可以为新项创建虚拟视图控制器。我不是说你应该复制“地图”控制器或任何东西,我只是说创建一个空的视图控制器并将其(或其位置)隐藏在属性中。假设您在
    应用程序:didFinishLaunchingWithOptions:
    中创建选项卡栏,它看起来像这样

    self.newViewController = [[UIViewController alloc] init];
    self.newViewController.title = NSLocalizedString(@"New", nil);
    self.newViewController.image = [UIImage imageNamed:"new.png"];
    
    将该视图控制器放置在选项卡栏控制器的
    viewControllers
    属性中的适当位置

    保存对贴图控制器的引用,方法与为虚拟新控制器保存引用的方法相同

    如果您尚未完成do,请将tabBarController的委托设置为应用程序委托。您可能需要声明您的应用程序委托符合
    UITABBARCONTROLLEDELEGATE

    uitabardelegate
    提供了一些钩子,用于跟踪选项卡栏的更改
    tabBarController:shouldSelectViewController:
    看起来是我们为您的所需行为提供支持的合适场所

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
    {
        if ([viewController isEqual:self.newViewController]) {
            self.tabBarController.selectedViewController = self.mapViewController;
            // Whatever logic you need to start the recording
            return NO;
        }
    
        return YES;
    }
    

    用户交互的外观有点奇怪-用户标记中间的项目(新),但左侧的项目(地图)被选中。如果您想要“tab bar triggers behavior”操作,我会选择idevrecipes路线,使按钮在视觉上清晰可见。但是,如果您喜欢选项卡栏项目的外观,我相信这就是您实现它的方式。

    用户只需转到地图选项卡并添加“新建”按钮,不是更直观吗?至少对我来说是这样。苹果不建议为用户跳转到标签页。该应用背后的想法是记录和分享用户周围的“风景”路线和图片。我一直在使用POP(纸上的原型,应用商店中的一个免费应用程序)来把线框和原型结合在一起测试UX,并且在标签栏中间有一个按钮,比开始在feed或地图上说“新”的Navbar条目感觉要自然得多。我明白你的意思。然而,拥有两个不同的地图可能会让用户感到困惑,特别是如果他们几乎做到了e