从标签栏弹出(如 Yelp 应用程序)

Posted

技术标签:

【中文标题】从标签栏弹出(如 Yelp 应用程序)【英文标题】:Popup From a Tabbar (Like Yelp App) 【发布时间】:2017-08-22 20:46:41 【问题描述】:

我非常想复制与您在 yelp 应用程序中看到的相同的 tabBar 弹出窗口(在底部的屏幕截图之前和之后),无论您在哪个视图中,您都可以按下中心 tabBar 项目并弹出窗口.

巧合的是,我有 5 个 tabBar 项目(如 Yelp),我正在尝试创建三个弹出窗口,每个窗口都有一个图像和标题(如 Yelp)。看到我正在尝试做的事情已经在应用程序中完成,这表明这是可能的,但我不知道该怎么做。我试图改变视图控制器之间的关系类型或以编程方式进行,但似乎没有任何效果。 我错过了什么或做错了什么?

标签栏控制器代码:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool 
    if viewController.tabBarItem.tag == 1 
        return false
     else 
        return true
    

按下前

按下后

【问题讨论】:

【参考方案1】:

一种解决方案是采用UITabBarControllerDelegate

这样我们可以使用委托的func tabBarController(UITabBarController, didSelect: UIViewController) 方法来改变常规的呈现行为并显示我们的弹出窗口。我们可以找到相对于标签栏按钮所需的偏移量(以 CGPoint 表示),然后应用该偏移量并将弹出按钮添加为子视图。 请注意,对于此方法,您需要以编程方式设置弹出按钮的框架。

或者,您也可以制作一堆弹出按钮,并将它们的 alpha 设置为 0,单击时设置为 1。希望这有帮助!谢谢:)

Custom action for tab bar UITabBarControllerDelegate documentation

【讨论】:

我很乐意在我的代码中实现这一点,最好是第二个,因为它似乎更容易添加,但我似乎遇到了麻烦。我正在使用您的第一个链接,并在我的UITabBarController 中使用shouldSelect 方法,在该方法中我给中间的标签栏项目标记了 1,并且在方法中我添加了if viewController.tabBarItem.tag == 1 return false else return true 但是当用户按下中间项目时它仍然传送到那个视图。我做错了什么? @AlessandroProspato,您能否向我们提供您的代码的 sn-p 或我可以看到的内容,以便验证发生了什么? EDITShould select 是传输到视图,所以如果你想留在同一个视图上,返回 false。不要在该方法中执行任何其他操作。 DidSelect 将有您的弹出窗口。 ShouldSelect 将停止传输。见返回值部分:developer.apple.com/documentation/uikit/… 感谢您的快速响应!我已经为shoudSelect 添加了我的代码。出于某种原因,这段代码仍在运送我。此外,我还没有向didSelect 添加任何内容,因为我不确定要在其中放置什么 这是一个我想解决的严重问题,但我不知道如何解决。非常感谢任何进一步的帮助 我为此编写的唯一代码就是我的问题。我在ifelse 语句处设置了断点,但是按下时没有调用它们

以上是关于从标签栏弹出(如 Yelp 应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

如果已安装,则将用户从 iOS 浏览器重定向到 App,如果未安装,则将用户重定向到 App Store - 像 Yelp

当它弹出时移动小吃栏下方的标签,当它在javascript中消失时将它们移回

导航栏隐藏在 iPhone sdk 的弹出视图控制器上

Yelp Middle UITabBar 导航

Ionic 2 Yelp API

Anglesharp - 如何从 Yelp 网站获得评分和评论?