如何在Swift中将函数从扩展名调用到UIViewController

时间:2018-05-29 12:28:51

标签: ios swift uinavigationcontroller uinavigationbar ios-extensions

我想让Navigation bar变得透明。它在我在同一ViewController内创建函数时有效,但是我想在许多其他ViewControllers中重复使用它,所以我决定使用extension扩展UINavigationController。当我尝试将函数调用到ViewDidLoad时,它无法正常工作。

import UIKit

class StudentsViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.makeNavigationBarTransparent()   
    } 
}

这是我的扩展

import UIKit

extension UINavigationController {
    func makeNavigationBarTransparent() {
        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationController?.navigationBar.shadowImage = UIImage()
    }
}

3 个答案:

答案 0 :(得分:1)

由于您决定编写导航控制器的扩展名,因此必须从其预期编写:

import UIKit

extension UINavigationController {
    func makeNavigationBarTransparent() {
        self.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationBar.shadowImage = UIImage()
    }
}

答案 1 :(得分:1)

您不需要navigationController?.

上的内容
extension UINavigationController {
    func makeNavigationBarTransparent() {
        navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationBar.shadowImage = UIImage()
    }
}

答案 2 :(得分:1)

这是因为你的viewController还没有放在你的导航堆栈中。如果你的vc没有放在导航堆栈中,那么self.navigationController将返回 nil

尝试将 makeNavigationBarTransparent()调用移至 viewWillAppear 方法。