nikans / monarchrouter Goto Github PK
View Code? Open in Web Editor NEWDeclarative URL- and state-based router written in Swift.
Home Page: https://nikans.com
License: MIT License
Declarative URL- and state-based router written in Swift.
Home Page: https://nikans.com
License: MIT License
Привет!
Обнаружил такую проблему. Если использовать пользовательскую реализацию presentModal в презентере и сделать показ модального окна поверх другого модального окна, то потом не работает их скрытие. Похоже проблема в связке дефолтных presentModal и dismissModal через presentedModal, которая в этом случае разрывается.
Также в этом случае нужны дополнительные проверки, как в дефолтном presentModal
guard modal != presentedModal else { return }
Но так как presentedModal недоступен, то можно сделать
guard modal.presentingViewController == nil else { return }
Порешать проблему dismissModal можно вот так
if let dismissModal = dismissModal {
self.dismissModal = dismissModal
}
else {
self.dismissModal = { modal in
modal.presentingViewController?.dismiss(animated: true, completion: nil)
presentedModal = nil
}
}
Это все корректные решения с точки зрения общей задумки или они что-то нарушают?
Привет!
Сейчас в lazyNavigationRoutePresenter используется такой способ управления стеком.
...
// only one, pop to root
if newStack.count == 1 && currentStack.count > 1 {
navigationController.popToRootViewController(animated: true)
}
// pop
if currentStack.count > newStack.count {
navigationController.setViewControllers(newStack, animated: true)
}
// push
else {
let diff = patch(from: currentStack, to: newStack)
diff.forEach({ change in
switch change {
case .insertion(let idx, let vc):
if idx == newStack.count - 1 {
navigationController.pushViewController(vc, animated: true)
} else {
navigationController.viewControllers.insert(vc, at: idx)
}
case .deletion(let idx):
navigationController.viewControllers.remove(at: idx)
}
})
}
...
У этого способа есть проблемы с анимацией переходов, когда меняется стек предыдущих контроллеров. Например, когда новый контроллер подменяет текущий.
Вроде бы есть более простой способ в том числе решающий и эту проблему. Вместо вышеприведенного кода использовать
navigationController.setViewControllers(newStack, animated: true)
После первых тестов ошибок не заметил. Ты не видишь тут каких-нибудь проблем?
Добрый день!
А каким образом предполагается строить роутинг для, например, случая выбора адреса, когда он реализуется с помощью довольно сложного интерфейса из скажем 3 вьюконтроллеров добавляющихся через навбарвьюконтроллер? И когда нужно прикрутить этот выбор в 3 разных местах программы.
Is there an example with code only approach? Or what should change on the provided example to work only with code and no storyboard?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.