Можно по-разному написать
No storyboard swift и тд.
Вот есть Видео
Как изменить констрейнт
Да, я только что его посмотрел… Типичная ситуация - создаешь вопрос на форуме и потом начинаешь понимать как найти его в интернете. Но у меня еще остались вопросы…
-
Как создать второй контроллер, чтобы его было видно? Я так пологаю в этом же методе сцены?
-
И еще, он создает это в SceneDelagate, но у меня поддержка с 11 версиии… Значит я должен делать это в AppDelegate?
Я не знаю как в новом XCode,
в старом, чтоб сделать стартовый VC в аппделегате делаете так:
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = viewController
class ViewController: UIViewColntroller { }
Я не очень понял вопрос, а именно Как сделать так, чтобы классы, которые я создаю, были как-то видно основному классу контроллера
В целом, если вы пользовались сигвеями и только, то для Вас откроется новый мир))
у контроллера есть ф-я present - для модального окна
И если у вас контроллеры находятся в навигационном стеке, то просто делать push
let vc = WorkDateVC()
navigationController?.pushViewController(vc, animated: true)
у меня обычно VM решает куда идти и передает case из енума, а VC обычно обрабатывает
Хранит ViewModel
enum To {
case close
case addresses(selected: AddressModel?)
case noncontact(NoncontactVcInfo)
case postponed(info: OrderBodyModel, completition: ((Date?) -> Void))
....
}
ViewController переходит
func handle(to: To) {
switch to {
case .close:
dismiss(animated: true, completion: nil)
case .addresses(let selected):
showNavBarWhenDisappear = true
let vc = AddressesVC(from: .Order, currentAddress: selected)
navigationController?.pushViewController(vc, animated: true)
....
}
Также, чтобы не платить тонну верстки внутри контроллера, советую переопределять ф-ю loadView
**class** WorkDateVcView: UIView {
....
}
**class** WorkDateVC: UIViewController {
lazy var contentView = WorkDateVcView(frame: UIScreen.main.bounds)
**override** **func** loadView() { view = contentView }
}
Ну вот например я создал первый контроллер без сториборда.
Теперь мне надо создать второй контроллер. Вы написали что создавать так:
class ViewController: UIViewColntroller { }
Я могу это создать в отдельном файле?
И когда я попытаюсь запушить его, он не будет выеживаться, что не может найти этот контроллер? Потому-что сейчас именно так. Хотя я сейчас еще попробую сделать, и дальше напишу что вышло
В отдельном конечно)
Если он у вас не видел его,
Targets -> BuildPhases там в Complilie Source + и посмотреть добавлен он или нет, а вообще перезапустите xCode, это странно
Ну это ладно, там скорее всего я не верно что-то сделал… сейчас делаю поп порядку… до этого дойдем. У меня вот другой вопрос. В видео показано как он инициализирует основнйо контроллер в SceneDelegate… Но! Так как у меня стоит поддержка 11+ версии, то мне пришлось поставить
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
...
Окей, в симуляторе у меня все запускается… Но что будет в версии ниже 13й? Как это должно инициализироваться там? В симуляторе нет даже возможности проверить это на версии ниже, что делать?
Эмм. Не совсем понял. Так у меня сейчас стоит v11, iPhone/iPad. Мне так нужно.
Это будет работать в версиях ниже?
у вас должен быть доступен симулятор ниже 13-й версии
Если вам нужны симуляторы более низких версий, их можно установить
ну вот у appDelegate нету свйоства window… я даже хз как туда это впихнуть чтобы работало… не понимаю
я не трогал новый sceneDelegate еще
Можете просто избавиться от scene delegate и вернуть старый appDelegate
я добавил свойство window классу AppDelegate, вобщем заработало… Но только вот для IOS 13 этот же код должен быть в SceneDelegate, иначе там будет черный экран… Но получается тогда дублирование кода… это как-то странно… врятли это должно так работать…
просто выпилить SceneDelegate я не могу, ибо для поддержки IOS 13 он должен быть… ругаться начинает