【发布时间】:2015-12-07 04:22:53
【问题描述】:
我发现了很多示例展示如何从 UIBarButtonItem 呈现弹出框,但我想知道如何从 UITabBarItem 呈现它。
这是我目前所拥有的
let selectedItem = self.menuTabBar.items![3]
let menuViewController: ActivityPopoverViewController = storyboard.instantiateViewControllerWithIdentifier("MenuViewController") as! ActivityPopoverViewController
presentViewController(menuViewController, animated: true, completion: nil)
menuViewController.modalPresentationStyle = .Popover
if let popoverMenuViewController = menuViewController.popoverPresentationController {
popoverMenuViewController.permittedArrowDirections = .Any
popoverMenuViewController.delegate = menuViewController
// popoverMenuViewController.barButtonItem = ?
}
我尝试将 UITabBarItem 的 selectedItem 转换为 UIBarButtonItem,但没有成功。我确信这是一个简单的过程,但我似乎找不到任何关于如何做到这一点的帮助。
我的目标是让这个橙色弹出框指示未读活动。
更新 #1。经过更多研究,我发现了这种呈现视图控制器的策略
let tabBarItemWidth = Int(self.menuTabBar.frame.size.width) / (self.menuTabBar.items?.count)!
let x = tabBarItemWidth * 3;
let newRect = CGRect(x: x, y: 0, width: tabBarItemWidth, height: Int(self.menuTabBar.frame.size.height))
print(newRect)
let menuViewController: ActivityPopoverViewController = storyboard.instantiateViewControllerWithIdentifier("ActivityPopoverViewController") as! ActivityPopoverViewController
menuViewController.modalPresentationStyle = .Popover
if let popoverMenuViewController = menuViewController.popoverPresentationController {
popoverMenuViewController.permittedArrowDirections = .Down
popoverMenuViewController.delegate = menuViewController
popoverMenuViewController.sourceRect = newRect
popoverMenuViewController.sourceView = self.menuTabBar
presentViewController(menuViewController, animated: true, completion: nil)
}
现在我的弹出框正在显示,但 newRect 的边界不起作用。弹出框占据了整个屏幕,而不是被限制在新的范围内。有谁知道如何强制新维度?
更新 #2
工作代码
let tabBarItemWidth = Int(self.menuTabBar.frame.size.width) / (self.menuTabBar.items?.count)!
let x = tabBarItemWidth * 3;
let newRect = CGRect(x: x, y: 0, width: tabBarItemWidth, height: Int(self.menuTabBar.frame.size.height))
print(newRect)
let menuViewController: ActivityPopoverViewController = storyboard.instantiateViewControllerWithIdentifier("ActivityPopoverViewController") as! ActivityPopoverViewController
menuViewController.modalPresentationStyle = .Popover
menuViewController.view.frame = newRect
menuViewController.preferredContentSize = CGSizeMake(150, 150)
if let popoverMenuViewController = menuViewController.popoverPresentationController {
popoverMenuViewController.permittedArrowDirections = .Down
popoverMenuViewController.delegate = menuViewController
popoverMenuViewController.sourceRect = newRect
popoverMenuViewController.sourceView = self.menuTabBar
presentViewController(menuViewController, animated: true, completion: nil)
}
【问题讨论】:
-
@Virussmca 我通过简单的谷歌搜索发现了这些链接,但我无法在 Swift 中复制这些链接。我的 menuViewController 或 popoverMenuViewController 都没有方法 presentPopoverFromRect
-
将自定义视图添加为 [appdelegate.window addSubview:yourview] 并在该 tababr 项目上添加框架
标签: swift popover uitabbaritem