空白标签栏项目作为链接

Posted

技术标签:

【中文标题】空白标签栏项目作为链接【英文标题】:blank Tab Bar item as link 【发布时间】:2014-11-20 06:23:43 【问题描述】:

好的,这就是交易。我有 5 个标签,其中 3 个只是链接。因此,当用户点击它们时,它实际上会将它们带到一个网站:

 - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item...

所以标签栏项目几乎可以作为一个按钮使用。

链接工作得很好,但问题是我不想在点击时加载视图。所以最初我为self.viewController(在标签栏控制器中)添加了一些[UIViewController alloc]。这些视图控制器是空白的,但它们允许我像这样添加图标:

UIViewController *vc = [UIViewController alloc];
[vc1.tabBarItem setImage:[[UIImage imageNamed:@"tab-fb"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
vc1.title=@"Facebook";

所有这些都可以正常工作,但是当用户单击它时,会出现一个空白的黑色视图。我知道这是正常的,但我该如何摆脱呢?我希望用户能够停留在当前视图上,但被引导到链接。

我试着做这样的事情:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
    selectedIndex=[[tabBar items] indexOfObject:item];

    if(selectedIndex == 1)
        [self setSelectedIndex:0]; //RIGHT HERE
       //...code to go to link...


但由于某种原因,程序没有响应[self setSelectedIndex:0];

有什么建议吗?

【问题讨论】:

【参考方案1】:

这对我的标签栏也不起作用。

但是,这种方法可能适合您。在您的应用委托中,didFinishLaunchingWithOptions:

MyTabBarController.delegate = self;

然后在你的应用委托中实现这个委托方法:

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

在方法中,您可以像这样检查 VC:

if ([tabBarController.viewControllers indexOfObject:viewController] == indexOfTabToBlock) return false;

这有效地阻止了切换到该选项卡。

您必须找到某种方法将此点击传达给您希望让用户保持打开状态的主视图控制器,以便它可以根据需要处理链接。例如,您可以使用通知。

【讨论】:

您不需要为此通知我们。您可以使用标签栏控制器的 selectedViewController 属性从 shouldSelectViewController: 方法中获取指向当前显示的视图控制器的指针。

以上是关于空白标签栏项目作为链接的主要内容,如果未能解决你的问题,请参考以下文章

从标签页中删除标签栏会留下空白。如何删除它?

导航栏项目作为标签栏项目

如何在本机反应中删除材料顶部标签栏上方的空白

SwiftUI,视图和标签栏之间的空白

如何将标签栏项目中的项目链接到另一个视图控制器

iOS 自定义标签栏项目比标签栏高