如何在更多导航控制器中获取所选项目的索引

问题描述 投票:1回答:2

我使用下面的代码获取标签栏控制器的选定项目。我的UITabbar有7个视图控制器(更多选项卡中有3个项目)。此代码仅适用于5个选项卡,但它不会返回更多项目的选定索引!

import UIKit
class CustomTabbarController: UITabBarController{

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    print(self.selectedIndex)
  }
}
swift3 xcode8
2个回答
1
投票

以下代码为我工作。我不得不重新设计moreTableView以遵循我的应用程序设计。函数'didSelectRowAt'返回选择的索引。

此代码将添加到“UITabBarController”类中。

var moreTableView: UITableView?
weak var currentTableViewDelegate: UITableViewDelegate?

func customizeMoreTableView() {
    moreTableView = moreNavigationController.topViewController?.view as? UITableView
    currentTableViewDelegate = moreTableView?.delegate
    moreTableView?.delegate = self
    moreTableView?.dataSource = self
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return (viewControllers?.count ?? 4) - 4
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let moreCell = UITableViewCell()

    let item = viewControllers?[indexPath.row + 4].tabBarItem
    moreCell.textLabel?.text = item?.title
    moreCell.textLabel?.textColor = .white
    moreCell.imageView?.image = item?.image
    moreCell.imageView?.tintColor = .white
    moreCell.backgroundColor = .black

    return moreCell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    currentTableViewDelegate?.tableView!(tableView, didSelectRowAt: indexPath)
}

0
投票

获取这样的选定项目:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    print(tabBar.items?.index(of: item))
}
© www.soinside.com 2019 - 2024. All rights reserved.