Создание программно интерфейса. А так же передача объекта между контроллерами

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

В предыдуще статье мы рассмотрели создание TabBarController и NavigationController программно в UIKit. В данной статье мы продолжим выполнение заданий и рассмотрим пункты 6 и 7. А Bar Button Item и Alert мы оставим на десерт и рассмотрим в следующей статье.

Добавьте PostViewController и настройка элементов для показа выбранного поста.

Чтобы у нас контроллеры не валялись, где не попадя давайте создадим папку Controllers и поместим в нее все файлы наших контроллеров. Так же в этой папку создаем новый UIViewController c именем PostViewController. Это будет наш контроллер для показа поста.

Первый делом, как просит нас задание, поменяйте заголовок у контроллера и цвет главной view. Для выполнения этого пункта у нас есть два пути:

1-й путь кустарно-топорный и к нему нет притензий. Просто внутри viewDidLoad прописываем все что нам надо:

override func viewDidLoad() {

        super.viewDidLoad()

        // Задаем базовый цвет

        self.view.backgroundColor = .lightGray

        // Выставляем title полученного поста в качестве заголовка контроллера.

        self.navigationItem.title = "Мой пост"

    }

2-й более элегантный и покажет в вас задатки будущего программиста использующего навыки ООП. Мы создаем метод в котором пишем то, что хотим сделать и вызываем этот метод внутри viewDidLoad :

 private func setupView() {

        self.view.backgroundColor = .lightGray

        self.navigationItem.title = "Мой пост"

        self.navigationItem.rightBarButtonItem = button

    }

Прекрасно, контроллер поста у нас есть. А как на него попасть? Для этого нужно действие перехода и это действие нам дает кнопка.

Создаем в FeedViewController кнопу перехода на PostViewController:

 // Создаем кнопку перехода

    private lazy var button: UIButton = {

        let button = UIButton()

        button.backgroundColor = .blue

        button.layer.cornerRadius = 12

        button.setTitle("Перейти на пост", for: .normal)

        button.setTitleColor(.lightGray, for: .normal)

        button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 24)

        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)

        button.translatesAutoresizingMaskIntoConstraints = false

        return button

    }()

Кнопка у нас принадлежит данному классу и поэтому private . Чтобы компилятор о ней постоянно не думал и не напрягался она у нас lazy. И далее в переменной мы ее создаем как кнопку UIButton() . Методом .backgroundColor задаем ей цвет. .layer.cornerRadius позволит нам скруглить углы и сделать ее более красивой. Так же создадим внутри кнопки текст для ее нормального состояния .setTitle() и зададим тексту цвет .setTitleColor(), если есть желание можем поменять размер и толщину шрифта .titleLabel?.font. Отключам стандартные ограничения (констрейнты) .translatesAutoresizingMaskIntoConstraints = false их мы зададим чуть ниже. И добавляем кнопке действие .addTarget(self, action: #selector(buttonAction), for: .touchUpInside), а для чего мы ее собственно и создали.

Ах да... не забываем эту самую кнопку вернуть return button

Ну как говориться, пол дела сделано! Собственно теперь нам осталось добавить кнопку и установить ее положение на экране. Как я писал выше вы можете делать напрямую во viewDidLoad или создавать метод и его добавлять - мне нравится второй метод:

private func setupButton {

        self.view.addSubview(self.button)

        self.button.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -100).isActive = true

        self.button.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true

        self.button.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true

        self.button.heightAnchor.constraint(equalToConstant: 50).isActive = true

    }

self.view.addSubview(self.button) добавляет нашу кнопку непосредственно во view , а далее мы привязываем кнопку к низу с отступом в 100 пикселей (т.к. отступ у нас идет вверх, то и знак "-". Это относится и к отступам справа), справа и слева, и задаем высоту.

Ну соотсветсвенно и сам метод перехода.

 @objc private func buttonAction() {

        let postViewController = PostViewController()

        self.navigationController?.pushViewController(postViewController, animated: true)

    }

А вот тут нам нужно создать сначала сам UIViewController на который мы хотим перейти и потом сделать переход (как говорят - запушить), предварительно завернув его в NavigationController

Ну и не забываем добавить методы в viewDidLoad

Создание и передача объектов между контроллерами

Данный пункт заслуживает внимания. Он научит работать с Data и делегировать ее между контроллерами.

Для начала создадим папку Data и в ней создадим swift файл Post и внутри это файла создаем структуру Post со свойством title: String.

struct Post {

    var title: String

}

Далее мы создайте объект типа Post в FeedViewController и передаем его в PostViewController. Для это просто создаем переменную post со свойством Post сразу после создания самого класса FeedViewController

class FeedViewController: UIViewController {

    // Создаем объект типа Post в FeedViewController

    var post = Post(title: "Мой пост")

А для того, чтобы передать его в PostViewController некоторые подумают, что нужно создавать делегаты или писать замыкания. Нет, ничего не надо!

В предыдущем пункте мы уже в методеbuttonAction() создали UIViewController , тем самым обеспечив к нему доступ.

И сейчас, предварительно создав переменную для заголовка поста в PostViewController:

class PostViewController: UIViewController {

    var titlePost: String = "Anonymous"

  Мы просто в внутри метода buttonAction() присваиваем переменной titlePost значение переменной post :

 postViewController.titlePost = post.title

Осталось только в self.navigationItem.title заменить "Мой пост" на titlePost :

 self.navigationItem.title = titlePost

Ну вот и все! Сегодня вы научились создавать и настраивать кнопку, а также делать переход между ViewController. Получили вводну в Data - создание объектов и работу с ними.

А в следующей публикации мы создадим и настроим Bar Button Item и UIAlertAction.

Источник: https://habr.com/ru/post/654839/


Интересные статьи

Интересные статьи

В 2021 г. ожидается рост числа запросов на чат-боты на 15-20% от ор­га­низа­ций из госсектора, об­ра­зова­ния, медицины, ло­гис­ти­ки, ре­тей­ла и e-commerce, промышленны...
Субботний вечер омрачен скандалом - сайт не работает, провайдер негодяй, админы - не специалисты, а сервера - решето. Вызов принят, или почему при всей нелюбви к 1С-Битри...
Zabbix — комплексное решение для мониторинга серверов, сетевых устройств и сервисов, позволяющее обрабатывать огромное количество метрик. С 5-ой версией в Zabbix пришло множество у...
Устраивать конкурсы в инстаграме сейчас модно. И удобно. Инстаграм предоставляет достаточно обширный API, который позволяет делать практически всё, что может сделать обычный пользователь ручками.
В контексте событий про Open Distro, открытие исходников X-Pack, а также статьи «The Cloud and Open Source Powder Keg» — перевод поста Шейя Бэнона (основатель и CEO Elastic). ...