[РЕШЕНО] Как избежать copy-pats UI элементов


#1

Добрый день. Подскажите, не могу сообразить.

Предположим есть простое приложение с несколькими экранами где реализованы tableView, данные получаются из сети после чего таблицы обновляются.

Создал индикатор который показывает, что идет обновление из сети

let activityIndicator = UIActivityIndicatorView(style: .medium)

Сделал небольшую функцию инициализации

func setupActivityIndicator() {
self .activityIndicator.hidesWhenStopped = true
activityIndicator.color = colorLiteral(red: 0.4666666687, green: 0.7647058964, blue: 0.2666666806, alpha: 1)
}

Инициализировал её в viewDidLoad()

И написал две простые функции которые добавляют и убирают индикатор в navigationItem во время загрузки из сети

func startActivityIndicator() {
self .navigationItem.titleView = self .activityIndicator
self .activityIndicator.startAnimating()
self .activityIndicator.isHidden = false
}

func stopActivityIndicator() {
self .activityIndicator.stopAnimating()
self .navigationItem.titleView = nil
}

Соответственно загрузка начинается, я включаю индикатор, загрузка заканчивается я останавливаю

Проблема в том что у меня этот код дублируется в каждом контроллере, подскажите как грамотно его вынести в отдельный UI класс


#2

Легко, создайте базовый ViewController, вынесите всю работу с индикатором туда. Все ваши экраны наследуйте от базового класса. Вуаля.


#3

Оп, сработало, я не так делал. Я создавал контроллер, выносил логику туда и пытался наследоваться и от созданного контроллера и от UIViewControllera компилятор писал что невозможно множественное наследование. Тупил.

Спасибо. Сегодня я узнал кое что новое и мои конроллеры похудели.

Если есть возмотжность подскажите, куда вынести основные цвета приложения, что бы при необходимости поменять их только в одном месте.

extension создать?! или еще как то можно?! (Это что бы другую тему не создавать для мелочи)


#4

Можно extension для UIColor, либо отдельный класс/структуру Colors, либо сразу в Assets. Зависит от потребностей.


#5

Благодарю, пойду гуглить.