为 UITabBarItem 设置操作
Posted
技术标签:
【中文标题】为 UITabBarItem 设置操作【英文标题】:Set Action for UITabBarItem 【发布时间】:2017-03-08 20:11:03 【问题描述】:如何为我的UITabBarItem
设置action
?我可以以某种方式将它从storyboard
连接到代码吗?还是以编程方式?如果是这样,怎么办?
我的层次结构是UITabBarController
-> UINavigationController
-> UITabBarItem
很抱歉这个问题很愚蠢,但我真的需要一个答案。我在网上找不到任何关于此的信息。
使用 Swift 3 和 Xcode 8
谢谢!
我厌倦了 Mannopson 的回答(没用):
class BarsViewController: UITableViewController,UISearchResultsUpdating,UISearchBarDelegate,UISearchDisplayDelegate,UITabBarControllerDelegate
override func viewDidLoad()
super.viewDidLoad()
self.tabBarController?.delegate = self
func tabBarController(tabBarController: UITabBarController, didSelect viewController: UIViewController)
if viewController.tabBarItem.tag == 1
self.tableView.setContentOffset(.zero, animated: true)
extension UITableView
func scrollToTop(animated: Bool)
setContentOffset(CGPoint.zero, animated: animated)
silentBob 回答对我不起作用:
class BarsViewController: UITableViewController,UISearchResultsUpdating,UISearchBarDelegate,UISearchDisplayDelegate,UITabBarControllerDelegate
override func viewDidLoad()
super.viewDidLoad()
self.tabBarController?.delegate = self
func tabBarController(tabBarController: UITabBarController, didSelect viewController: UIViewController)
if viewController.tabBarItem.tag == 1
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true)
我也尝试了 Tushar Sharma 的回答,但效果不佳。
我想要做的是,当您在tableView
中向下滚动时,您将点击当前的Tabbaritem
,tableView 将像 intagram 一样滚动到顶部。
【问题讨论】:
你的意思是 UITabBarItem 吗? 是的!对不起,我会解决这个问题。 使用一个标签,然后就可以检测当前选中的是哪个标签栏项 可以帮我写代码吗?我不知道我该怎么做... @Mannopson 我非常感谢您的帮助 【参考方案1】:基本上你会这样做:
1) 确保您的班级向 UITabBarDelegate 确认
2) 为每个标签栏项目在 IB 中设置标签
3) 实现 didSelectItem 方法,如下所示:
class yourclass: UIViewController, UITabBarDelegate
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem)
if(item.tag == 1)
//your code for tab item 1
else if(item.tag == 2)
//your code for tab item 2
【讨论】:
感谢您的帮助!我将在几个小时内对其进行测试并报告:) @Newbie Questions 没问题一定要在 IB 中提供标签,否则如果您尝试直接访问标签,它将崩溃。 @Newbie Questions 你在storyboard中指定了标签吗? 是的,我给每个 tabbarbuttonitem 一个从 1 到 4 的特定选项卡 我不知道,目前无法查看。几个小时后我也许可以。 @TusharSharma 知道为什么它不起作用吗?【参考方案2】:我认为您需要设置UITabBarControllerDelegate
协议。试试这个:
class YourClass: YourSuperClass, UITabBarControllerDelegate
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)
if viewController.tabBarItem.tag == 1
self.tableView.setContentOffset(.zero, animated: true)
override func viewDidLoad()
super.viewDidLoad()
self.tabBarController?.delegate = self
【讨论】:
感谢您的帮助!我一回到家就试试这个 我在我的 tableViewController 代码文件中实现了这个。 您是否在 viewDidLoad 中将委托设置为 self? 是的。委托设置为 self 你不需要任何其他滚动功能【参考方案3】:如果您只想滚动到顶部,有一个内置的系统选项,请尝试点击状态栏。
编辑:
斯威夫特 3:
class ViewController: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
override func viewWillAppear(_ animated: Bool)
self.tabBarController?.delegate = self
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
extension UITableViewController : UITabBarControllerDelegate
public func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)
tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: true)
斯威夫特 2:
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true)
extension UITableViewController : UITabBarControllerDelegate
func tabBarController(tabBarController: UITabBarController, didSelect viewController: UIViewController)
tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true)
哦,那是一顿美味的午餐:)
这是一个 UITableViewController 的扩展,如果你想在每个视图控制器上滚动到顶部,你可以使用它,我还在玩它,但我认为你可以使用它。
【讨论】:
是的,我知道,但是 instagram 有两种方法可以点击状态栏和 tabbaritem....我也想要它。 在这里,我已经编辑了我的答案,我认为这应该适合你。您还可以选择使用属性而不是标签来在标签栏中获取正确的项目。 scrollRectToVisible 也是一个选项。 你能翻译成 swift 2.2 吗?我很难翻译那个。会很有帮助,谢谢 当然可以,但如果可以的话,我建议您切换到 Swift 3。它不会倒退,而且 Swift 4 已经在进行中。我认为语法是这样的:scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: .Top, animated: true) 我知道......遗憾的是我几乎不知道 swift 2.2,这就是我开始使用的,我最喜欢这种语法......我需要很多帮助才能将我的项目转移到Swift 4 :( 我正在尝试通过您的在线答案和视频来学习。感谢您的翻译,我现在就试试以上是关于为 UITabBarItem 设置操作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 UITabBarItem 上设置不同的未选择图像和文本颜色