Swift 如何从 UIViewController 的扩展调用函数
How to call a function from an extension to UIViewController in Swift
我正在努力使我的 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()
}
}
既然决定要写navigation controller的扩展,就必须从它的角度来写:
import UIKit
extension UINavigationController {
func makeNavigationBarTransparent() {
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
}
}
您不需要 navigationController?.
extension UINavigationController {
func makeNavigationBarTransparent() {
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
}
}
这是因为您的 viewController 尚未放置在您的导航堆栈中。如果您的 vc 未放置在导航堆栈中,则 self.navigationController 将 returns nil。
尝试将您的 makeNavigationBarTransparent() 调用移动到 viewWillAppear 方法。
我正在努力使我的 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()
}
}
既然决定要写navigation controller的扩展,就必须从它的角度来写:
import UIKit
extension UINavigationController {
func makeNavigationBarTransparent() {
self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
}
}
您不需要 navigationController?.
extension UINavigationController {
func makeNavigationBarTransparent() {
navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
}
}
这是因为您的 viewController 尚未放置在您的导航堆栈中。如果您的 vc 未放置在导航堆栈中,则 self.navigationController 将 returns nil。
尝试将您的 makeNavigationBarTransparent() 调用移动到 viewWillAppear 方法。