Результати пошуку за запитом: начальный курс c
Love is... Вивчати програмування разом
Автор: Редакція ITVDN
Дорогие друзья! К нам стремительно приближается самый главный праздник февраля – День Святого Валентина, он же День Влюбленных. И многие в раздумьях – что подарить любимому человеку.
Мы уже спешим на помощь! В преддверии праздника у нас супер предложение – вы можете приобрести 2 подписки по цене одной и учиться на ITVDN вместе.
Как это работает?
Вы покупаете любой подарочный сертификат и получаете второй такой же в подарок. Платите за один, а получаете два.
Активировать подписку, используя подарочный сертификат, вы можете когда угодно в течение года с момента покупки. При этом два сертификата могут быть активированы в разное время, но мы надеемся, что вы будете учиться вместе, потому что такое обучение более эффективное.
Какие пакеты подписки можно приобрести по акции?
Все, абсолютно все подписки, которые есть на ITVDN, вы можете купить по акции.
Это универсальные подписки с доступом ко всем курсам – Премиум (12 мес), Базовый (6 мес) и Стартовый (3 мес), а также пакеты подписок по 16 специальностям, с полным перечнем вы можете ознакомиться на странице Подписки.
Важно! После того, как выберете подписку, которая вам подходит, не забудьте выбрать опцию Купить в подарок. И тогда после покупки на ваш емейл прийдет 2 подарочных сертификата.
Сроки акции
Приобрести подарочные сертификаты для двоих по цене одного можно только 10 и 11 февраля! Активировать подписки можно после окончания акции - с 12 февраля 2022 в течение года.
Купить 2 подарочных сертификата по цене одного
Love is… смотреть видео уроки – вместе!
Love is… делать домашки и задания на тренажере – вместе!
Love is… радоваться и праздновать, пройдя тестирование с максимальными баллами – вместе!
Love is… фиксить баги в коде и в жизни – вместе!
Учитесь на ITVDN –вместе!
Розіграш подарункових сертифікатів на навчання
Автор: Редакція ITVDN
Дорогие друзья! Мы благодарим всех, кто выбирает ITVDN для изучения программирования. У нас для вас приятный сюрприз - в 2020 году на ITVDN ежемесячно будет проводиться розыгрыш подарочных сертификатов на обучение.
Один раз в месяц мы будем разыгрывать:
1 подарочный сертификат Премиум.
1 подарочный сертификат Базовый.
1 подарочный сертификат Стартовый.
С перечнем услуг, которые входят в каждый пакет подписки, вы можете ознакомиться на странице Подписка.
Как стать участником розыгрыша подарочных сертификатов?
Участником розыгрыша становится каждый пользователь ITVDN, совершивший покупку 1 курса или пакета подписки в течение месяца. В феврале проводится розыгрыш среди тех, кто сделал покупку в январе и т.д.
Шансы на выигрыш будут выше у тех, кто приобрел подписку на больший срок.
К розыгрышу не будут допущены пользователи, не указавшие свое имя и фамилию в Личном кабинете.
Розыгрыш подарочных сертификатов будет происходить в прямой трансляции на YouTube канале ITVDN в первый рабочий день каждого нового месяца (3 февраля, 2 марта и т.д.) в 16:00. Результаты будут опубликованы на сайте ITVDN и в социальных сетях.
Подарочный сертификат победитель может использовать для себя или подарить другу. Сертификат действителен в течение 1 года. Подробнее о Подарочных сертификатах можно почитать тут.
Итоги розыгрыша подарочных сертификатов от 3 февраля 2020 года.
Итоги розыгрыша подарочных сертификатов от 2 марта 2020 года.
Итоги розыгрыша подарочных сертификатов от 3 апреля 2020 года.
Итоги розыгрыша подарочных сертификатов от 5 мая 2020 года.
Итоги розыгрыша подарочных сертификатов от 2 июня 2020 года.
Итоги розыгрыша подарочных сертификатов от 2 июля 2020 года.
Итоги розыгрыша подарочных сертификатов от 5 августа 2020 года.
Итоги розыгрыша подарочных сертификатов от 2 сентября 2020 года.
Итоги розыгрыша подарочных сертификатов от 2 октября 2020 года.
Итоги розыгрыша подарочных сертификатов от 4 ноября 2020 года.
Итоги розыгрыша подарочных сертификатов от 2 декабря 2020 года.
HTML5 & CSS3 марафон
Автор: Редакція ITVDN
Хотите выиграть подписку ITVDN на три месяца? Тогда не медлите и принимайте участие в соревновании!
С 8 по 13 ноября на ITVDN проходит HTML5 & CSS3 марафон. Выполните все практические задания на интерактивном тренажере ITVDN по курсу «HTML5, CSS3 Starter» (с максимальными баллами при наименьшем количестве попыток). И награда будет Ваша!
Подписку ITVDN на три месяца (Пакет Стартовый) получат 5 победителей, чьи результаты будут наилучшими.
Тренажер по HTML5 и CSS3 — это отличная возможность проверить свои знания и навыки по этим технологиям. Задания охватывают 7 тем, среди которых работа с изображениями, таблицами и списками, позиционирование элементов, виды верстки, формы, основы CSS.
Вам нужно будет выполнить 56 заданий. За каждое успешно выполненное задание дается определенное количество баллов (от 5 до 20 в зависимости от уровня сложности задания). За использование подсказок и за дополнительные попытки решения задачи баллы будут сниматься. Задания можна выполнять с перерывами. Результаты пройденных заданий сохраняются и Вы можете всегда продолжить с той задачи, на которой остановились ранее.
Для участия в Акции:
1. В период с 8 по 13 ноября 2019 года выполните все задания практикума «HTML5&CSS3 Starter»;
2. Убедитесь, что в Вашей регистрационной форме правильно указаны имя, фамилия и емейл. Участники, не указавшие эту информацию, будут дисквалифицированы.
Результаты акции с именами победителей будут опубликованы на сайте ITVDN 14 ноября 2019 года. Также будут опубликованы имена участников, которые войдут в Топ-50. Подарочные сертификаты победителям будут отправлены 14 ноября на емейлы, указанные в регистрационной форме.
Участвуйте в марафоне и пусть победят сильнейшие!
HTML5 & CSS3 марафон 2018
Автор: Редакція ITVDN
Хотите выиграть подписку ITVDN на три месяца? Тогда не медлите и принимайте участие в соревновании!
С 1 по 8 февраля 2018 года на ITVDN проходит HTML5 & CSS3 марафон. Выполните все практические задания на тренажере ITVDN по курсу «HTML5, CSS3» с максимальными баллами при наименьшем количестве попыток. И награда будет ваша!
Подписку на три месяца получат 5 победителей, чьи результаты будут наилучшими.
Тренажер по HTML5 и CSS3 — это отличная возможность проверить свои знания и навыки по этим технологиям. Задания охватывают 9 тем, среди которых HTML5 формы, микроданные и геолокация, Canvas, WebStorage, WebWorkers, CSS3, псевдоклассы и градиенты, анимация.
Вам нужно будет выполнить 128 заданий. За каждое успешно выполненное задание дается определенное количество баллов (от 5 до 20 в зависимости от уровня сложности задания). За использование подсказок и за дополнительные попытки решения задачи баллы будут сниматься. Задания можна выполнять с перерывами. Результаты пройденных заданий сохраняются и Вы можете всегда продолжить с той задачи, на которой остановились ранее.
Для участия в Акции:
1. В период 1 по 8 февраля 2018 года выполните все задания практикума «HTML5&CSS3»
2. Убедитесь, что в вашей регистрационной форме правильно указаны Ваше имя, фамилия и емейл. Участники, не указавшие эту информацию, будут дисквалифицированы.
Результаты акции с именами победителей вы сможете увидеть на сайте 9 февраля 2018 года. Также будут опубликованы имена участников, которые войдут в топ-50.
Участвуйте в марафоне и пусть победят сильнейшие!
Кто есть кто в IT компании. Структуры и роли
Автор: Александр Марченко
<p>Большое количество начинающих в IT считает, что разработчик — это специалист, спрятанный за семью мониторами и постоянно пишущий тонны программного кода. Однако, само создание ПО — это лишь часть его труда. Помимо прямых обязанностей разработчик играет важную роль в экосистеме команды: участвует в митингах, взаимодействует с другими членами команды для поиска путей решения проблем, перенимает знания и навыки у опытных коллег и т. д. Поэтому любому новичку необходимо быть в курсе “кухни” его IT-компании, чтобы быть максимально эффективным.</p>
<p>Каким образом разработчик должен взаимодействовать с рабочей инфраструктурой и коллективом? Каковы зоны ответственности у каждого члена компании и к кому можно обращаться за помощью? Как юному девелоперу стоит оценивать себя с точки зрения продуктивности? Обо всем этом мы поговорим на встрече с Александром Марченко, у которого за плечами 8 летний опыт работы в IT. </p>
<p><strong>На встрече будут рассмотрены следующие темы:</strong></p>
<ul>
<li>Почему разработка ПО — это сложный многоуровневый процесс?</li>
<li>Структура менеджмента: разбор иерархии должностей и зон ответственности</li>
<li>Автоматизация работы: ее важность и умение использовать соответствующие инструменты</li>
<li>Как сделать результаты своей работы прозрачными для “нетехнических” менеджеров?</li>
<li>Что обозначают KPI, OKR и прочие аббревиатуры?</li>
</ul>
<p><strong>Целевая аудитория</strong>: начинающие разработчики, студенты учебного центра CyberBionic Systematics.</p>
Як прокачати англійську для співбесіди до IT-компанії.
Автор: Олександр Залуцький
<p dir="ltr">На текущий момент существует большой бизнес на тему изучения английского языка. Кто-то предлагает онлайн-курсы, кто-то преподавателя, а некоторые — чудесное мобильное приложение, которое сделает все за вас. Что действительно нужно для прохождения интервью на английском в IT-компанию? Какие техники прокачки английского работают, а какие — попросту тратят ваше время? На эти и другие вопросы Александр Залуцкий попытается дать ответы в этом вебинаре!</p>
<p dir="ltr">Александр Залуцкий — IT-специалист из Кремниевой Долины, который недавно познакомил нас со своей историей становления и профессионального роста на вебинаре “<a href="https://itvdn.com/ru/webinars/description/siberia-to-siliconvalley">Из Сибири в Кремниевую Долину</a>” </p>
<p dir="ltr"><strong>План вебинара:</strong></p>
<ol dir="ltr">
<li>Цель вебинара.</li>
<li>Каким образом английский язык применяется в работе IT-специалистов.</li>
<li>Английский в школе — чему там учат?</li>
<li>Какие приемы в изучении английского языка НЕ работают.</li>
<li>Что нужно делать, чтобы прокачать свой английский для собеседования.</li>
<li>Общие рекомендации по изучению английского языка.</li>
<li>Обсуждение, вопросы и ответы.</li>
</ol>
<p dir="ltr"><strong>Целевая аудитория:</strong></p>
<p dir="ltr">Начинающие IT специалисты, которые хотят узнать, как за короткий срок подготовиться к прохождению интервью на английском в IT-компанию.</p>
Як знайти роботу програмістом без досвіду у 2019 році
Автор: Вадим Рибалко
<p>На вебинаре мы посмотрим статистику зарплат по городам, по профессиям и языкам программирования. Рассмотрим необходимые характеристики для прохождения HR-интервью. Вы получите список полезных ссылок для начинающих разработчиков (преимущественно ссылки на проекты на сервисе GitHub, в которых будет описаны правила хорошего тона для разработчика).</p>
<p>Мы обсудим опыт и особенности работы на фрилансе, а также ошибки, кторые часто совершают новички.</p>
<p>Мы рассмотрим многие нюансы, на которые вы, возможно, ранее не обращали внимание, но они важны для получения прямого оффера (предложения) от компании, в которой вы хотите работать. Обратим внимание на некоторые подводные камни и уловки, с которыми вы можете столкнуться в процессе поиска работы.</p>
<p><strong>План вебинара:</strong></p>
<p> 1) Рассмотрение вакансий (DOU.UA, Мой круг, LinkedIn) - советы по поиску хороших вакансий и привлечения внимания HR специалистов к своей кандидатуре.</p>
<p>2) Статистика зарплата (статистика по нескольким языкам программирования из разных направлений (веб frontend, backend, десктоп )</p>
<p>3) План действий для получения оффера (создание резюме, собственного сайта, портфолио и т.д.)</p>
<p>4) Английский (вынесен в отдельный пункт, так как является критически важным моментом)</p>
<p>5) Фриланс - свободное плавание (советы по «жизни» на фрилансе, рассказ про фриланс-биржи, пример одной из лучших бирж - freelancehunt)</p>
<p>6) Полезные ссылки и примеры для разработчиков</p>
<p>7) Подведение итогов, вопросы и ответы.</p>
<p><strong>Целевая аудитория:</strong></p>
<p>Данный вебинар будет интересен начинающим разработчикам, которые уже задумываются о поиске первой работы, студентам ВУЗов (3-5 курс), а также для свитчеров, которые хотят перейти в IT из другой сферы.</p>
Введення в розробку програм під iOS. Частина 2.
Автор: Volodymyr Bozhek
Здравствуйте дорогие читатели.
В этом уроке мы добавим форму списка товаров на складе. Разберем класс “UITableViewController” и как с ним работать.
Откройте проект Warehouse из предыдущего урока. Необходимо добавить в наш проект две View. На одной будут содержаться все товары, которые есть на складе. На второй форма редактирования товара.
Для реализации View со списком всех товаров мы будем использовать готовый табличный класс контроллера “UITableViewController”. Данный класс уже реализовал все необходимые протоколы внутри себя для уверенной работы табличного контроллера.
Есть и другой вариант, который мы не будем рассматривать в этом уроке, это сделать свой класс “UITableViewController”, унаследовшись от базового класса “UIViewController” и реализовав протоколы “UITableViewDelegate” и “UITableViewDatasource”.
В панели навигатора откройте модуль “Main.storyboard”.
Найдите в библиотеке компонентов, компонент “Table View Controller” и перетяните в пустую область дизайнера рядом с View входа в систему.
В панели навигатора, нажмите правой кнопкой мыши на папке “Warehouse” и в контекстном меню выберите пункт “New File...”. Откроется диалоговое окно добавления новых модулей в проект. Найдите в нем модуль “Swift File”, выделите его и нажмите кнопку “Next”.
Появится диалоговое окно задания названия добавляемого модуля. В поле “Save As” введите “SuppliesViewController.swift”, нажмите кнопку “Create”.
Откройте модуль “SuppliesViewController.swift”, вы увидите в нем только “import Foundation”, это добавление пространства имен на базовую библиотеку классов Swift (аналог в C#, пространство имен “System”).
Удалите эту строку. Добавьте в этот модуль следующий код:
Разберем это код построчно.
На 9 строке, мы подключили пространство имен “UIKit” в нем содержатся классы для взаимодействия с компонентами пользовательского интерфейса в iOS.
На 11 строке, мы объявили класс с именем “SuppliesViewController”, который наследуется от класса “UITableViewController”.
На 12 строке, мы объявили строковый массив с именем “supplies”, в этом массиве содержится статический список товаров (чуть позже мы заменим его на модель).
На 17 строке, мы переопределили метод “viewDidLoad” класса “UITableViewController”, данный метод вызывается когда View начинает загрузку. В этом методе необходимо делать предварительную инициализацию компонентов, какими либо данными.
На 18 строке, мы вызываем базовый метод “viewDidLoad” класса “UITableViewController”, с помощью ключего слова “super” (аналог в C#, ключевое слово “base”).
Начиная с 21 строки и по 33 строку, мы переопределяем поведение базового контроллера “UITableViewController”, для отображения данных в нем. Более конкретно, мы переопределяем реализацию протокола “UITableViewDataSource”.
На 21 строке переопределенный метод “numberOfSections”, возвращает количество секций в нашем табличном представлении. Секции это разделители между сгруппированными наборами ячеек в табличном представлении. У нас будет одна секция.
На 25 строке переопределенный метод “numberOfRowsInSection”, возвращает количество ячеек в секции. Секция у нас одна, поэтому возвращаем количество товаров, которые будут в этой секции.
На 29 строке переопределенный метод “cellForRowAt indexPath”, возвращает представление ячейки таблицы.
На 30 строке мы создаем экземпляр типа “UITableViewCell” с повторно используемым идентификатором “сell”, первый параметр в инициализаторе это стиль ячейки, второй параметр это идентификатор этой ячейки в табличном представлении. Данный метод вызывается столько раз, сколько ячеек мы добавляем в нашу таблицу. Каждый вызов данного метода содержит в аргументе “indexPath” текущую позицию ячейки относительно таблицы.
На 31 строке мы обращаемся к компоненту “Label”, расположенному внутри ячейки, чтобы задать текст, для этого используем свойство “textLabel”, затем от этого свойства уже обращаемся к свойству “text”, чтобы задать текст компонента “Label”. Текст мы извлекаем из массива товаров “supplies” через subscript (по индексу). Чтобы получить текущий номер строки, необходимо обратиться к аргументу “indexPath” и обратиться к свойству “row”.
На 32 строке мы возвращаем созданную ячейку. Эта ячейка затем внутренними механизмами будет добавлена в табличное представление.
Откройте модуль “Main.storyboard”, выделите добавленный ранее “Table View Controller”.
В панели свойств, откройте вкладку “Show the identity inspector”, найдите поле “Class”, введите значение “SuppliesViewController”. Через это свойство мы подвязываем класс контроллера “SuppliesViewController” к нашему табличному представлению в дизайнере.
Найдите свойство “Storyboard ID”, задайте значение в нем “SuppliesViewController”. Данное свойство содержит уникальный идентификатор представления, этот идентификатор будет позднее использоваться нами при поиске табличного представления программно в экземпляре “Storyboard”.
Теперь нам необходимо добавить в обработчик события на нажатие кнопки “Вход”, переход на табличное представление.
Откройте модуль “ViewController”. Добавьте код в метод “loginButtonTapped”, как показано ниже (смотреть выделенный код):
Разберем добавленный код:
На 23 строке, правым операндом мы обращаемся к свойству “storyboard” контроллера “ViewController”, в этом свойстве содержится экземпляр модуля “Main.storyboard”. Вызов метода “instantiateViewController” производит поиск представления по идентификатору “Storyboard ID”, которое мы задавали ранее, в модуле “Main.Storyboard” и возвращает базовый класс контроллера “UIViewController”.
Класс “UITableViewController” наследуется от класса “UIViewController”, соответственно допустимо приведение данного экземпляра к классу “UITableViewController”.
Класс “SuppliesViewController“ наследуется от класса “UITableViewController”. Соответственно мы приводим полученный экземпляр в правом операнде к типу “SuppliesViewController” и присваиваем его левому операнду c именем “controller”.
Левый операнд объявлен константой, поскольку он не будет в дальнейшем проходить переинициализацию.
На 24 строке, мы обращаемся к свойству “navigationController”, в данном свойстве содержится экземпляр класса “UINavigationController” (сейчас он не инициализирован и содержит значение “nil”). Затем от экземпляра этого свойства мы вызываем метод “pushViewController”. Данный метод принимает два аргумента, экземпляр контроллера, который надо отобразить и флаг использовать анимацию при отображении контроллера или нет.
Если вы сейчас запустите приложение, заполните поля “Имя пользователя” и “Пароль пользователя” и нажмете кнопку “Вход”, вы получите ошибку, так как текущее представление не содержит экземпляра “UINavigationController”.
Давайте это исправим.
Откройте модуль “Main.storyboard”. Выделите в дизайнере представление “ViewController”, затем в меню Xcode выберите “Editor -> Embed In -> Navigation Controller”. После этого действия в дизайнер Storyboard добавится представление “Navigation Controller” привязанное к представлению “ViewController”.
Данное представление инициализирует свойство “navigationController” класса “ViewController”, данное свойство имеет тип доступа только для чтения и не подлежит переинициализации в коде контроллера.
Модуль “Main.storyboard” должен выглядеть так:
Теперь запустите приложение. Заполните поля “Имя пользователя” и “Пароль пользователя”, нажмите кнопку “Вход”. Откроется табличное представление:
Но в нем нас смущает “Top Bar”, который отображается сверху. Его не должно быть видно на странице входа в систему. Чтобы его убрать, откройте модуль “Main.storyboard”, выделите представление “ViewController”, в панели свойств перейдите на вкладку “Show the attributes inspector”.
На этой вкладке найдите свойство “Top Bar” и установите для него значение “None”, в дизайнере “Top Bar” пропал, но вот если вы запустите приложение снова, то он остался на прежнем месте. Чтобы его скрыть, перейдите в модуль “ViewController.swift”. После переопределенного метода “viewDidLoad” вам необходимо переопределить еще два метода класса “UIViewController” это методы “viewWillAppear” и “viewWillDisappear”. Исправьте код в соответствии с кодом ниже:
Разберем построчно внесенные изменения.
На 33 строке мы переопределили метод “viewWillAppear”. Данный метод вызывается когда наше представление уже появилось на экране.
На 34 строке мы вызываем метод “viewWillAppear” из базового класса “UIViewController”, чтобы сохранить его поведение.
На 35 строке мы обращаемся к свойству “navigationController” и вызываем от экземпляра этого свойства метод “setNavigationBarHidden”. Данный метод скрывает или отображает “Top Bar” и принимает два аргумента, первый аргумент указывает скрыть или отобразить “Top Bar”, второй указывает, сделать это с анимацией или без. В этом методе мы скрываем “Top Bar”.
На 38 строке мы переопределяем метод “viewWillDisappear”. Данный метод вызывается когда наше представление перекрывается другим представлением поверх него.
На 39 строке мы вызываем метод “viewWillDisappear” из базового класса “UIViewController”, чтобы сохранить его поведение.
На 40 строке мы обращаемся к свойству “navigationController” и вызываем от экземпляра этого свойства метод “setNavigationBarHidden”. В этом методе мы отображаем “Top Bar”.
Запустите приложение.
Теперь все отображается правильно.
С одной стороны да, с другой нет. После того как мы выполнили переход на табличное представление, в нем в левом верхнем углу отображается кнопка навигации “< Back”, но ведь наше приложение на русском.
Давайте изменим текст этой кнопки на “<- Назад”. Откройте модуль “SuppliesViewController.swift”. После метода “cellForRowAt indexPath”, добавьте следующий код:
Разберем этот код построчно.
На 36 строке мы объявили метод с именем “initNavigationButtons”, который ничего не возвращает и ничего не принимает.
На 37 строке мы вызываем обращаемся в левом операнде к свойству “navigationItem” в котором содержится экземпляр класса “UINavigationItem”. Данное свойство предоставляет доступ к системным кнопкам навигации. От экземпляра свойства “navigationItem” мы обращаемся к свойству “leftBarButtonItem” в котором содержится экземпляр класса “UIBarButtonItem” инициализированный по умолчанию текстом “< Back”.
В правом операнде мы создаем новый экземпляр класса “UIBarButtonItem” и вызываем его инициализатор, который принимает 4 аргумента.
Первый аргумент “title” задает текст кнопки навигации. Чтобы в текст вставить специальный символ Unicode, необходимо в меню среды разработки Xcode выбрать “Edit -> Emoji & Symbols”, затем выбрать подходящий символ и нажать на него.
Второй аргумент “style” принимает перечисление типа “UIBarButtonItemStyle”, в этом аргументе мы задаем значение по умолчанию.
Третий аргумент “target” имеет тип “AnyObject?”, в него мы передаем экземпляр нашего контроллера.
Четвертый аргумент “action” имеет тип “Selector?”, в него мы передаем метод обработчик нажатия на кнопку навигации. Обратите внимание на запись “#selector(SuppliesViewController.backToParent)”, в этой записи с помощью выражения “#selector” создается экземпляр типа “Selector”. В скобках мы указываем путь к методу обработчику события в формате “Класс контроллера . метод”.
На 40 строке мы объявляем метод обработчик события нажатия по кнопке навигации с именем “backToParent”, который не принимает аргументов и ничего не возвращает.
На 41 строке мы обращаемся в правом операнде к свойству “navigationController” и вызывает от экземпляра этого свойства метод “popViewController”. Данный метод скрывает текущее представление и переход на предыдущее представление в иерархии вызова представлений. Принимает один аргумент, который задает стиль открытия предыдущего представления с анимацией или без.
Добавьте в метод “viewDidLoad”, вызов метода “initNavigationButtons” (19 строка).
Запустите приложение. Вы увидите такой результат:
На этом урок подошел к концу.
На следующем уроке, мы создадим модель товара. Добавим кнопку добавления нового товара, добавим форму редактирования товара и зададим поведение в табличном представлении на редактирование/удаление товара. После того, как редактирование товаров будет завершено, можно будет приступать к уроку в котором будут разбираться иконка приложения и папка Assets.
Введення в розробку програм під iOS. Частина 1.
Автор: Volodymyr Bozhek
Здравствуйте, дорогие читатели.
Данный блок будет продолжением темы “Введение в разработку под iOS", которую мы затронули ранее.
В этом уроке мы:
рассмотрим пользовательский интерфейс среды разработки;
сделаем форму авторизации для нашего приложения Warehouse;
научимся добавлять обработчиков событий на элементы управления.
Работу продолжим на примере приложения Warehouse, который мы создавали в первом уроке.
В среде разработки Xcode можем видеть две панели. Левая из них - это панель навигации по составляющим проекта:
Правая делится на панель свойств и панель библиотеки компонентов.
Панель свойств:
Библиотека компонентов:
Также вы можете использовать набор функций в панели инструментов, который находится сверху:
Обратите внимание на кнопки этой панели справа:
Нажимая на них, вы будете скрывать или отображать левую, правую, нижнюю панель в среде разработки.
Левее находится блок функциональных кнопок для отображения данных выбранного модуля:
Кнопка отображения текущего представления модуля.
Кнопка отображения связанного модуля с текущим модулем. Применяется для того, чтобы видеть на одной половине экрана код контроллера, а на другой - дизайнер представления.
Кнопка отображения изменений с момента последней заливки данных в репозиторий. Используется, если ваш проект находится под управлением GIT
Панель снизу - это панель отладки и логирования:
В панели навигации откройте модуль “Main.storyboard”. Обратите внимание на стрелку слева, которая указывает на View. Эту стрелку можно перемещать, зажав ее левой кнопкой мыши.
Отмечу, что при включении в настройках вашей OS X эмуляции двухкнопочной мыши важно понимать, что на тачпаде нет понятия нажатия левой или правой кнопки мыши, есть просто нажатие.
Данная стрелка означает точку входа в наше приложение. Точка входа привязывается только к одной View, и эта View будет отображаться первой при старте нашего приложения. Исключением может быть только модуль конфигурации предварительной заставки “LaunchScreen.storyboard”, тогда сначала будет появляться заставка с презентацией функций приложения, а затем наша View, на которую была привязана точка входа.
Нажмите на View, на панели свойств откройте вкладку “Show the identity inspector”.
В поле “Class” содержится класс контроллера, который привязан к нашему представлению (View).
Рядом с названием класса “ViewController” есть серая иконка со стрелкой вправо, если вы нажмете на нее, то попадете в модуль контроллера “ViewController”.
Вернитесь в модуль “Main.storyboard”.
В свойствах дизайнера внизу выберите устройство “iPhone 6s”:
Перенесите из библиотеки компонентов два элемента управления “Text Field” и один элемент управления “Button” на View. Выделите элемент управления “Text Field” справа и слева от него будут видны квадратики, потяните за правый квадратик и растяните поле на всю ширину экрана. То же самое проделайте со вторым элементом управления “Text Field” и элементом управления “Button”.
У вас должно получится так, как на картинке ниже:
Обратите внимание на кнопки внизу дизайнера:
Это кнопки для отображения панелей свойств элементов управления. На этих панелях задаются выравнивания элементов управления либо относительно View, на котором они расположены, либо относительно других элементов управления, находящихся с ними по соседству. В терминологии Apple они называются ограничениями (Constraints).
Это отдельная и довольно объемная тема для понимания, поэтому пока мы будем пользоваться только одной панелью задания ограничений, более простой для понимания.
Выделите первый элемент управления “Text Field”, затем нажмите на кнопку “Pin” в дизайнере:
Появится диалог ограничений для данного элемента управления:
Выпадающие списки сверху, снизу, слева и справа - это допустимое расстояние элемента управления относительно стен View соответственно.
Нам необходимо задать ограничение, чтобы наш элемент управления остался на том же месте, где он сейчас расположен на View , но при этом, в зависимости от ширины экрана устройства, подстраивался под эту ширину. Чтобы этого добиться, снимите галочку с “Constrain to margin”, отметьте галочкой поле “Height”, чтобы высота элемента управления не менялась. Отметьте линии верхняя, левая и правая. У вас должно получиться вот так:
Заметьте, кнопка “Add 4 Constraints” стала активной. Нажмите на нее.
Теперь проделайте ту же самую операцию для второго элемента управления “Text Field” и элемента управления “Button”. Значения в выпадающих списках не меняйте.
Можно запустить приложение и посмотреть, что получилось.
Остановите приложение.
Откройте модуль “Main.storyboard”. Теперь нам необходимо привести в порядок пользовательский интерфейс и сделать его понятным для пользователя.
Выделите первый элемент управления “Text Field”. В панели свойств откройте вкладку “Show the attributes inspector”, на этой вкладке найдите поле “Placeholder”, введите в это поле текст “Введите имя пользователя”. Свойство Placeholder задает текст, который отображается в поле ввода, когда это поле не заполнено.
Выделите второй элемент управления “Text Field”, в панели свойств, откройте вкладку “Show the attributes inspector”, на этой вкладке найдите поле “Placeholder”, введите в это поле текст “Введите пароль пользователя”. Затем найдите поле “Secure Text Entry” и отметьте его галочкой. Данное свойство будет отображать звездочки вместо текста, вводимого пользователем, используется для полей ввода паролей.
Выделите кнопку “Button”, в панели свойств, откройте вкладку “Show the attributes inspector”, найдите поле без названия с текстом “Button”, удалите этот текст и добавьте текст “Вход”.
Найдите поле “Text Color”, установите цвет текста “White Color”.
Найдите поле “Background”, установите фон кнопки цветом “Blue Color”.
Перетащите из библиотеки компонентов на View под кнопку “Вход” элемент управления “Label”. Растяните его по ширине экрана. Задайте ему такие же ограничения, как мы задавали выше для прошлых элементов управления.
Выделите элемент управления “Label”, в панели свойств, откройте вкладку “Show the attributes inspector”. На этой вкладке найдите поле без названия с текстом “Label”. Удалите из него текст, введите текст “Нет ошибок”.
Найдите поле “Alignment”, задайте выравнивание текста по центру.
Выделите View, в панели свойств, откройте вкладку “Show the attributes inspector”, найдите поле “Background”, установите фон View “Light Green”.
У вас должно получиться следующее:
Теперь необходимо добавить действие на нажатие кнопки “Вход” и объявить переменные для полей ввода и элемента управления “Label”. Для этого в панели инструментов нажмите кнопку “Show the assistant editor”, экран разделится пополам. Если экран вашего компьютера не позволяет нормально видеть дизайнер и модуль контроллера, скройте панель навигатора и панель свойств.
Выделите первый элемент управления “Text Field” в дизайнере, не отводя курсор мыши с этого элемента управления, зажмите кнопку “Ctrl”, нажмите и удерживайте левую кнопку мыши, затем начинайте вести курсор на окно с модулем контроллера, когда курсор окажется между фигурными скобками класса контроллера, отпустите левую кнопку мыши, появится диалоговое окно параметров элемента управления:
В данном окне есть несколько полей.
Давайте их рассмотрим подробнее.
Поле “Connection”, может принимать несколько вариантов значений, в данном уроке нас будут интересовать всего два значения “Outlet” (используется для создания переменной, связанной с элементом управления) и “Action” (используйте для задания обработчика события на какое либо действие элемента управления).
Поле “Name”, сюда вы вводите название вашей переменной, которая будет связана с элементом управления.
Поле “Type”, содержит тип элемента управления (название класса элемента управления), можно ввести другой класс, если вы знаете иерархию наследования элемента управления UITextField.
Поле “Storage”, содержит вид размещения созданной переменной в памяти операционной системы. Может принимать значения “Weak” или “Strong”.
В поле “Name” введите название переменной “userNameTxt” и нажмите кнопку “Connect” или кнопку “Enter” на клавиатуре. В модуле контроллера добавится строчка с названием переменной, которую вы задали.
Обратите внимание на черный шарик, находящийся на одном уровне с этой переменной слева в области нумерации строк. Нажмите на него, и в дизайнере выделится элемент управления, к которому привязана данная переменная.
Вот пример:
Повторите данное действие для остальных элементов управления.
Для второго текстового поля укажите название переменной “passwordTxt”.
Для элемента управления “Label” укажите название переменной “validationLabel”.
Для кнопки выберите в поле “Connection” значение “Action”, у вас добавится еще одно поле “Event”. В данном поле задается событие, на которые вы хотите назначить обработчик в коде контроллера. По умолчанию установлено событие “Touch Up Inside”, оставьте его как есть.
В поле “Type” установлено значение “AnyObject” (Это класс, который может содержать любые типы данных, аналог подобного класса в других языка программирования, например, C# - это класс Object). Измените это значение на тип элемента управления UIButton, поскольку данный объект будет передан в аргументы метода обработчика назначенного события и намного удобнее будет обращаться явно к экземпляру кнопки, чем распаковывать этот экземпляр путем приведения к типу “UIButton” из типа “AnyObject”.
В поле “Name” введите “loginButtonTapped”. У вас должно получиться вот так:
Нажмите кнопку “Connect”. Код контроллера должен выглядеть вот так:
Теперь давайте проверим, работает ли событие нажатия по кнопке “Вход”. Добавьте в метод “loginButtonTapped” следующий код:
Давайте разберем этот код.
На 16 строке идет проверка наличия текста в поле ввода “Имя пользователя”. Ключевое слово “self” означает ссылка на самого себя, в других языках программирования аналог, например, в C# - это ключевое слово “this”.
Из переменной “userNameTxt” мы обращаемся к свойству “text”, данное свойство возвращает текст, который вы ввели в данный элемент управления. Знак вопроса в конце этого свойства ставится, так как это свойство имеет тип String? и может содержать значение “nil” (аналог “null” в C#).
Далее мы обращаемся к свойству “characters” , которое содержит массив символов и от этого массива вызываем свойство “count”, чтобы получить количество символов в строке. Такая запись введена, начиная со Swift 3, доступного с обновлением среды разработки до Xcode 8 версии.
В ранних версиях Swift, например, версии 2.1-2.3 можно было получить длину строки намного короче “self.userNameTxt.text?.length”.
Если поле ввода “Имя пользователя” не заполнено, мы отображаем сообщение валидации “Имя пользователя не задано”.
На 18 строке мы делаем аналогичную проверку для поля “Пароль пользователя”.
На 20 строке мы проверяем, если заполнены оба поля ввода, тогда все хорошо и мы выводим сообщение “Нет ошибок”.
Обратите внимание на запись “(self.userNameTxt.text?.characters.count)!”, скобки и знак восклицания в конце, на самом деле, применяются к свойству “text”, так как оно имеется Nullable тип. Этой записью мы гарантируем компилятору, что в данном свойстве не будет содержаться значение “nil” и данное свойство будет инициализировано.
Теперь запустите приложение и проверьте его работу.
На этом урок подошел к концу.
В следующем уроке мы рассмотрим работу с классами UITableViewController, навигацию между представлениями, понятие делегата, разберем формат и размеры иконки приложения, научимся использовать Assets.
Що нового в Angular 5
Автор: Дмитро Охріменко
Переход от AngularJS к Angular 2 был огромным шагом вперед. При этом изменилось абсолютно все, без обратной совместимости. В то же время, Angular 4 добавила новые возможности, но при этом была обратно совместимой с Angular 2 (Версия Angular 3 была пропущена из-за @angular/router, который на момент релиза был 3.x, в то время как остальные пакеты 2.x. Для того, чтобы избежать путаницы и перевести все пакеты к одной версии, третья версия была пропущена). Angular 5 - это следующее обновление, в котором изменения затронули механизмы, работающие «под капотом».
Многие пользователи ITVDN задают вопрос об актуальности учебных программ видеокурса Angular Essential, который записан с использованием версии 2 и видеокурса Angular Advanced (версия 4). Angular 5 не является чем-то абсолютно новым, это улучшение существующего Фреймворка. Чтобы понять и начать использовать возможности, которые появились в пятой версии, необходимо знать основы, которые не изменились, начиная со второй версии.
Что нового в Angular 5?
Улучшенный компилятор. В Angular 4 компилятор перекомпилировал все файлы при каждом изменении. В Angular 5 компилятор работает только с теми файлами, в которых есть изменения, а это значит, что время на компиляцию проекта в целом значительно снизилось.
Оптимизированная сборка. В Angular CLI при использовании production build совместно с версией Angular 5 по умолчанию будет применяться build optimizer, который с помощью семантического анализа кода приложения сможет значительно уменьшить его размер.
Акцент на упрощение разработки PWA (Progressive Web Apps). PWA - это приложения, которые объединяют в себе лучшее, что есть в веб-приложениях и лучшее, что есть в мобильных приложениях.
PWA работают независимо от выбранного браузера;
адаптируются под устройство - десктоп, планшет, телефон;
могут работать без подключения к Интернет или при перебоях со связью;
выглядят как приложение, установленное на устройство;
благодаря Service Worker содержат актуальную обновленную информацию;
являются безопасными, так как работают через HTTPS;
используют возможности, подобные push уведомлениям;
Installable – позволяют пользователю добавить приложение на домашний экран устройства.
Поддержка TypeScript 2.4. Angular 5 поддерживает версию TypeScript 2.4, что дает возможность использовать новые возможности TS: перечисления, основанные на строках, улучшения проверки типов при работе с generic-типами, week-type-detection и прочее https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html
Pipes, адаптированные под локализацию. Обновленные Pipes для Date, Currency, Number и Percent, нет необходимости использовать i18n. https://github.com/angular/angular/blob/master/CHANGELOG.md#i18n-pipes
Новые события Router. Используя события ActivationStart и ActivationEnd или ChildActivationStart и ChildActivationEnd, можно организовать отображения индикаторов загрузки при смене маршрута.
HttpClient. Новый HttpClient был добавлен в версии 4.3, старый http клиент помечен как depreceted в новой версии. В Angular 6 старый клиент будет удален. Из преимуществ нового клиента можно выделить самостоятельное извлечение JSON без необходимости явного применения метода map и возможность применять interceptors. https://angular.io/guide/http
Валидация форм. Теперь при работе с формами, c помощью свойства updateOn, можно определить, в какой момент будет происходить проверка – на событие blur или submit (вместо проверки на каждое событие input).
Замена ReflectiveInjector на StaticInjector. Изменен механизм для внедрения зависимостей. Для нового StaticInjector не нужен полифил Reflect (но при использовании JIT данные полифил все равно нужно будет использовать), что может уменьшить размер приложения.
Angular CLI 1.5 использует Angular версии 5.
Улучшение NgZone. NgZone стала еще быстрее, также библиотеку можно отключить для применения другой библиотеки для улучшения производительности.
Улучшенный RxJS. Поддержка обновлена до версии 5.5.2 и выше. Поддержка новых pipable operators https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md
Angular 5 получился компактней и быстрее, чем его предшественники, и не обошелся без новых возможностей. Запуск следующей версии Angular планируется на 28 марта 2018 года. Будем ждать улучшений и новых возможностей от команды Angular.