Да, с этим у меня проблемы)) Извиняюсь)
Но я думал централизовано все делать!
Т.е. например на уровне application существует errorSubject, в который идут все сетевые ошибки, и чтобы не биндить его к каждому VC все делать через window, но встает вопрос с определением, где я сейчас нахожусь!!!
Я может что-то не понимаю и из-за этого не могу решить задачу!)
Как сделать view видимым на любом VC в стеке!?
Посмотри как с лоадером сделано. LoaderView - это просто вьюха, в которой есть постоянно вращающийся спиннер. Там логики ноль.
extension UIView {
func showProccessing() {
DispatchQueue.main.async {
if let window = UIApplication.shared.keyWindow {
window.addSubview(LoaderView(frame: window.frame))
}
}
}
func hideProccessing() {
DispatchQueue.main.async {
if let window = UIApplication.shared.keyWindow {
window.subviews.forEach { view in
if view is LoaderView { view.removeFromSuperview() }
}
}
}
}
}
Ну и использование простое:
class ViewController... {
func foo() {
view. showProccessing()
//загрузили данные
view.hideProccessing()
}
}
Да) Я делал также) Ток с xibom
У тебя высвечивается на модальных VC?!
В общем если решу, то отпишу, пока не особо работает, может так и нельзя сделать, либо нужно отслеживать на каком VC нахожусь и отправлять указатель на него, но эт прям сложно!!!
Спасибо за Советы!)
Попробуй тест сделать: в модальном контроллере в методе viewDidAppear() запусти метод (ну хоть мой кусок кода добавь). Только вью свою подставь или пустышку с белым фоном. А через пару секунд вызови метод hide…
И посмотри появится или нет.
Она обязана появится.
Ахахахахахахахаххахах!!!
Вот что такое недопонимание!!!
СПАСИБО!!!
Сделал вечный обсервабл и да, все работает!!!
В общем, я делал через window.rootViewController.view
Блин, почему сразу не нашел, что в UIWindow есть addSubview!!!
А сейчас смотрю документациию
Inherits From
Еще раз спасибО!
Observable<Int>.interval(1, scheduler: MainScheduler.instance)
.subscribe(onNext: { _ in
if let window = UIApplication.shared.keyWindow {
let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
view.backgroundColor = UIColor.red
window.addSubview(view)
}
})
Это ты rxSwift-ом там по ios решил ударить?
я бы замерял производительность. Надо ли так изголяться? Хотя rx умный. не должен сильно нагружать.
Да)
Я прям тащусь от него, пока производительность на второй план)
Так сказать получаем опыт!)
Ну, потом расскажи, как там с дебагом дела обстоят. Знакомые сеньоры-помидоры до ночи сидят чтоб понять откуда баг и как выпилить. Поэтому в текущей конторе хоть некоторые и балдеют от RX, остальные плюются и обходятся без него.
Что-то вы тут нагородили. Как из пушки по воробьям.
class BaseViewController: UIViewController {
...
var myModalView: UIVIew?
private func initModalView() {
//создаете свое любое view
//встраиваете его в view.addSubVIew()
}
func showModaView(visible: Bool) {
//показываете либо прячете его
//предварительно проверив, что myModalView != nil
//можно с анимацией
}
}
class ViewController1: BaseViewController {
...
func someAction() {
if someError != nil {
showModalView(visible: true)
//по вкусу можно добавить и передачу данных.
}
}
}
Никаких обсерверов, ничего лишнего.
P.S. если же вам нужно привязать ваше view к конкретному view или позиции, это все так же можно делать в initModalView с переданными параметрами. Тут уже можно делать как душе угодно.