从标签栏弹出(如 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 或我可以看到的内容,以便验证发生了什么? EDIT:Should select
是传输到视图,所以如果你想留在同一个视图上,返回 false。不要在该方法中执行任何其他操作。 DidSelect 将有您的弹出窗口。 ShouldSelect 将停止传输。见返回值部分:developer.apple.com/documentation/uikit/…
感谢您的快速响应!我已经为shoudSelect
添加了我的代码。出于某种原因,这段代码仍在运送我。此外,我还没有向didSelect
添加任何内容,因为我不确定要在其中放置什么
这是一个我想解决的严重问题,但我不知道如何解决。非常感谢任何进一步的帮助
我为此编写的唯一代码就是我的问题。我在if
和else
语句处设置了断点,但是按下时没有调用它们以上是关于从标签栏弹出(如 Yelp 应用程序)的主要内容,如果未能解决你的问题,请参考以下文章
如果已安装,则将用户从 iOS 浏览器重定向到 App,如果未安装,则将用户重定向到 App Store - 像 Yelp