我正在尝试访问rightBarButton函数来显示另一个ViewController中的购物车,尽管我可以调用该函数,但不会显示任何图像,即购物车图像

下面的代码显示了我如何调用此函数。

override func viewDidLoad() {
            super.viewDidLoad()
            // Adding Right Bar Button Item
            let rightBarButton = RightBarButton()
            rightBarButton.addingRightButton()
    }

下面的代码显示了rightBarButton函数。
class RightBarButton {

    var storyboard = UIStoryboard()
    var navigationItem = UINavigationItem()
    var navigationController = UINavigationController()

    func addingRightButton() {

        let image = UIImage(named: "cart")

        let finalImage = resizeImage(image: image!, newWidth: 30)

        navigationItem.rightBarButtonItem = FFBadgedBarButtonItem(image: finalImage, target: self, action: #selector(rightButtonTouched))

        let button = navigationItem.rightBarButtonItem as? FFBadgedBarButtonItem

        cartCount { (cartCount) in
            print("Api calling done ...")
            print(cartCount)
            button?.badge = "\(cartCount)"
        }
    }

    @objc func rightButtonTouched() {
        // print("Event Called")
    }

    func cartCount(completion: @escaping (Int) -> Void) {
        // print("Api calling ...")
    }
}

如果我将此代码添加到viewDidLoad()内,则图像将显示,并且click事件也将起作用。

如果您发现有关此代码的任何解决方案,请提供帮助!

最佳答案

这是行不通的,因为navigationItem类中的RightBarButton不属于任何导航控制器(因为它是手动创建的,并且未明确附加)。

使创建的FFBadgedBarButtonItem实例可被视图控制器访问,以便可以正确添加它:

override func viewDidLoad() {
    super.viewDidLoad()
    // Adding Right Bar Button Item
    let rightBarButton = RightBarButton()
    rightBarButton.addingRightButton()

    navigationItem.rightBarButtonItem = rightBarButton.badgeBarItem // badgeBarItem is the property exposed to the view controller
}

编辑的RightBarButton类:
class RightBarButton {

    var badgeBarItem: FFBadgedBarButtonItem?

    func addingRightButton() {

        let image = UIImage(named: "cart")

        let finalImage = resizeImage(image: image!, newWidth: 30)

        badgeBarItem = FFBadgedBarButtonItem(image: finalImage, target: self, action: #selector(rightButtonTouched))

        cartCount { [weak self] cartCount in
            print("Api calling done ...")
            print(cartCount)
            self?.badgeBarItem?.badge = "\(cartCount)"
        }
    }

    @objc func rightButtonTouched() {
        // print("Event Called")
    }

    func cartCount(completion: @escaping (Int) -> Void) {
        // print("Api calling ...")
    }
}

关于ios - 从Swift中的另一个ViewController访问rightBarButton函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55862860/

10-10 17:55