Функция быстрого доступа к помощнику

Я пытаюсь получить доступ к функции «addNavBar ()» из моего вспомогательного класса, но когда я запускаю эмулятор, на HomeViewController не отображается представление.

Swift 4

HomeViewController.swift

class HomeController: UIViewController {
let NavBar = NavigationBarHelper()
override func viewDidLoad() {
    super.viewDidLoad()
    NavBar.addNavBar()
}

}

NavigationBarHelper.swift

class NavigationBarHelper: UIView {
    func addNavBar() {
        let rect = CGRect(x: 10, y: 70, width: 250, height: 100)
        let navBarView = UIView(frame: rect)
        navBarView.backgroundColor = UIColor.blue
        self.addSubview(navBarView)
    }
}

swift,function,

0

Ответов: 3


1 принят

selfв NavigationBarHelper - это не тот же объект, что и представление в контроллере представления. Передайте представление VC в качестве параметра. Нет необходимости делать NavigationBarHelper подклассом UIView (на самом деле он также может быть структурой).

class NavigationBarHelper {
    func addNavBar(to view: UIView) {
        let rect = CGRect(x: 10, y: 70, width: 250, height: 100)
        let navBarView = UIView(frame: rect)
        navBarView.backgroundColor = UIColor.blue
        view.addSubview(navBarView)
    }
}

пожалуйста, также придерживайтесь соглашений об именах

class HomeController: UIViewController {
let navBarHelper = NavigationBarHelper()
override func viewDidLoad() {
    super.viewDidLoad()
    navBarHelper.addNavBar(to: self.view)
}

0

Вместо создания объекта каждое использование

let NavBar = NavigationBarHelper()

Я думаю, что это более надежный способ сделать это staticтак

class NavigationBarHelper: UIView {
 static func addNavBar(view:UIView) {
    let rect = CGRect(x: 10, y: 70, width: 250, height: 100)
    let navBarView = UIView(frame: rect)
    navBarView.backgroundColor = UIColor.blue
    view.addSubview(navBarView)
 }
}

и называть его напрямую без создания объекта

NavigationBarHelper.addNavBar(view: self.view)

-1

Лучшая альтернатива для этого была бы такой, extensionчто вам не нужно создавать специальный класс для этого

extension UIView {
    func addNavBar() {
        let rect = CGRect(x: 10, y: 70, width: 250, height: 100)
        let navBarView = UIView(frame: rect)
        navBarView.backgroundColor = UIColor.blue
        self.addSubview(navBarView)
    }
}

И в вас UIViewControllerвы можете просто написать это, не создавая объект своего помощника.

self.view.addNavBar()
быстры, функция,
Похожие вопросы