Использование Блоков В Ios. Часть 1

В процессе изучения разработки на Objective-C и iOS я так и не смог понять принципы работы блоков.

Сбивало с толку то, что их можно было передавать в качестве параметров методам.

я наткнулся статья , что мне показалось крайне интересным, так как рассматривались не только блоки, но и процесс разработки приложения.

Пост адаптирован для xCode 7.3.1.



Предисловие

Блоки — невероятно мощное дополнение к C/Objective-C, позволяющее объединять фрагменты кода в отдельные блоки и манипулировать ими как объектами.

Все больше и больше API требуют использования блоков в iOS, поэтому очень важно их понимать.

Однако их синтаксис и некоторые тонкие аспекты часто сбивают с толку новичков.

Но не бойтесь – этот урок будет очень полезен.

В двух частях этого урока мы создадим небольшой проект iOS «iOS Diner».

Само приложение простое: пользователь выбирает блюдо из меню, чтобы создать заказ, как будто идет на обед. Будьте осторожны: процесс творчества усиливает чувство голода! В первой части мы разработаем пользовательский интерфейс нашего приложения, попутно учитывая Раскадровка (дословно — раскадровка — примечание переводчика), включая небольшое руководство по созданию и использованию веб-сервисов для загрузки меню в формате JSON. Примечание .

Если вы уже достаточно знакомы с Раскадровка И Разработчик интерфейсов , вы можете пропустить первую часть и сразу перейти к ко второй части , где мы начнем использовать блоки.

Ээта часть фокусируется только на Раскадровка И Разработчик интерфейсов .

Во второй части Здесь будет продемонстрировано комплексное использование блоков для программирования логики приложений, асинхронной обработки данных, фоновых задач, использование в качестве альтернативы многим стандартным API и многое другое.



Начинать

Откройте Xcode и создайте новый проект.

Использование блоков в iOS. Часть 1

Пожалуйста, включите «iOSDiner» в название проекта.



Использование блоков в iOS. Часть 1

Запустите проект. Конечно, он по-прежнему пуст, и симулятор покажет пустой белый экран.



Использование блоков в iOS. Часть 1

В настройках проекта в Информация о развертывании снимите флажок Портрет .



Использование блоков в iOS. Часть 1

Первое, что мы сделаем, это настроим представление.

Для этого потребуется немного графики.

Вы можете скачать отсюда .

Это необходимо будет добавить в ресурсы проекта.

Честно говоря, мне никогда не нравилось, как xCode обрабатывает совпадения файлов в проекте и файловой системе, поэтому я обычно добавляю ресурсы в файловую систему вручную.

В Искатель Откройте папку проекта и создайте в ней папку «Ресурсы».

В нем создайте папку «Изображения».



Использование блоков в iOS. Часть 1

Скопируйте графику из загруженного ZIP-файла в папку «Изображения», затем перетащите папку «Ресурсы» в папку IOSDiner в Xcode, как показано на снимке экрана ниже.



Использование блоков в iOS. Часть 1

Теперь вы можете увидеть папку «Ресурсы» в Xcode, в которой есть подпапка «Изображения» с загруженными изображениями — точно так же, как в файловой системе.



Добавление изображений

Открыть Главная.

раскадровка .



Использование блоков в iOS. Часть 1

Если вы не видите второй столбец под названием « Просмотр сцены контроллера ", нажмите на кнопку ниже Расширять .

Итак, мы добавим изображения в Раскадровка как UIImageViews И UIКнопки .

Чтобы было проще, откройте боковую панель Утилиты и выберите Медиа библиотека .



Использование блоков в iOS. Часть 1

Здесь мы видим все изображения, ранее добавленные в проект. Вы, наверное, заметили, что у каждой картинки есть своя копия с «@2x» в конце названия.

Он используется для версии Retina. Нас интересует только обычная картинка.

Вы можете проверить, какая это версия изображения, щелкнув и нажав клавишу пробела.

Перетащите «bg_wall.png» в корневое представление, как показано ниже.

Если вы не уверены, что изображение расположено правильно, вы можете переключиться на Инспектор размеров, чтобы изменить его координаты X и Y.

Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1

Теперь сделайте то же самое со следующими изображениями:

  • человек.

    png

  • Sign_theiOSdiner.png
  • доска.

    png

  • bg_counter.png
  • total_field.png
  • food_box.png
Примечание.

Вы можете заставить Просмотр изображения подгоните точные размеры изображения, нажав одновременно cmd и ключ = .

Расставив все картинки по своим местам, приступайте к проекту.



Использование блоков в iOS. Часть 1

Ух ты! Почти похоже на приложение! Далее давайте добавим части пользовательского интерфейса.

На панели Утилиты переключить на Библиотека объектов .

Тащить Кнопка в центре нашего обзора, над монитором.

Дважды щелкните кнопку, которую вы только что добавили, и напишите «-1».



Использование блоков в iOS. Часть 1

Круглая прямоугольная кнопка Первоначально использовался Круглая прямоугольная кнопка , которые отсутствуют в xCode 7.3.1. На Переполнение стека есть решение, как их использовать.

Убедитесь, что кнопка выделена.

В Инспектор атрибутов установить атрибут Фон "button_silver.png".

Нажмите и удерживайте клавишу Альтернативный вариант и перетащите кнопку -1 вправо.

Это создаст копию объекта.

Измените его текст на «+1».



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1

Перетащите еще одну кнопку к левому краю монитора.

Установить Тип кнопки В Обычай , удалите заголовок кнопки и из Медиа библиотека перетащите "button_arrow_left.png" на кнопку

Использование блоков в iOS. Часть 1

Скопируйте эту кнопку и измените фоновое изображение на «button_arrow.png».



Использование блоков в iOS. Часть 1

И остается последняя кнопка.

Поместите его под доску и установите фоновое изображение «total_field.png».

Запустите проект.

Использование блоков в iOS. Часть 1

Выглядит довольно красиво.

Следующее, что мы добавим, — это метки и окно предварительного просмотра.

Давайте снова Библиотека объектов .

Перетащите UILabel на доску и растяните его по размеру доски.



Использование блоков в iOS. Часть 1

В инспекторе атрибутов установить Линии на 0 (это сделает метку многострочной), измените Цвет текста на белом и Шрифт - на Маркере Фетре 17.0. Обычно я считаю использование Marker Felt преступлением, но в нашем случае это работает вполне хорошо.



Использование блоков в iOS. Часть 1

Тащить UIImageView на монитор и растяните его по размеру.



Использование блоков в iOS. Часть 1

В Инспектор атрибутов изменять Режим на Соответствии формата.



Использование блоков в iOS. Часть 1

Перетащите еще один UILabel на табличке в правом нижнем углу.

Сделайте его размером с серую зону знака и установите Выравнивание в Центре.



Использование блоков в iOS. Часть 1



Установка IBOutlets и IBActions

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

Это то, что нам нужно IBOutlets И IBActions .

ИБ означает Разработчик интерфейсов , который используется для создания пользовательского интерфейса в xCode.

  • IBOutlet По сути, это ассоциация элемента пользовательского интерфейса (кнопки или метки) со ссылкой на него в коде.

  • IBAction — это действие (или метод, как удобнее) в коде, которое можно связать с каким-либо событием (например, нажатием кнопки) в разрабатываемом интерфейсе.

Итак, давайте напишем код для подключения элементов пользовательского интерфейса через IBOutlets И IBActions .

Закрыть вкладку Утилиты и открыть Помощник редактора .

В зависимости от того, как он настроен, экран может выглядеть иначе, чем на скриншоте.

Если вы хотите изменить отображение Помощник редактора , взгляните на его меню.



Использование блоков в iOS. Часть 1

Начнем с кнопок.

Выберите кнопку «-1», удерживайте клавишу Ctrl и перетащите его в код. Это автоматизирует создание IBOutlet для кнопки.

Для этого объекта все, что вам нужно сделать, это назвать его.

Мне нравятся префиксы «ib», потому что xCode упрощает автозаполнение всех элементов.

Назовите этот объект «ibRemoveItemButton» и щелкните Соединять .



Использование блоков в iOS. Часть 1

То же самое делаем и с другими кнопками.



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1

Устанавливаем этикетки таким же образом.



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1

Сейчас ViewController.m должно выглядеть так:

  
   

#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIButton *ibRemoveItemButton; @property (weak, nonatomic) IBOutlet UIButton *ibAddItemButton; @property (weak, nonatomic) IBOutlet UIButton *ibPreviousItemButton; @property (weak, nonatomic) IBOutlet UIButton *ibNextItemButton; @property (weak, nonatomic) IBOutlet UIButton *ibTotalOrderButton; @property (weak, nonatomic) IBOutlet UILabel *ibChalkboardLabel; @property (weak, nonatomic) IBOutlet UIImageView *ibCurrentItemImageView; @property (weak, nonatomic) IBOutlet UILabel *ibCurrentItemLabel; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

Теперь нам нужно добавить IBActions Для UIКнопки .

Это методы, которые вызываются в ответ на определенные события (Touch Up Inside, Touch Up Outside, Touch Cancel и т. д.).

Для кнопок чаще всего используется Touch Up Inside. Выберите кнопку «-1».

И снова с ключом Ctrl перетащите его в ViewController.m .

Поскольку это IBAction , мы используем префикс «iba».

Повторите для всех кнопок.



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1



Использование блоков в iOS. Часть 1



Установка веб-сервиса

Прежде чем мы начнем с кода, давайте настроим веб-сервис.

Я не буду все очень подробно объяснять, так как для этого уже есть несколько туториалов ( Как написать простой веб-сервис PHP/MySQL для приложения iOS И Как написать приложение для iOS, использующее веб-сервис ).

Код ниже показывает, как будет выглядеть PHP-код веб-службы.



<Эphp function getStatusCodeMessage($status) { $codes = Array( 100 => 'Continue', 101 => 'Switching Protocols', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 306 => '(Unused)', 307 => 'Temporary Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported' ); return (isset($codes[$status])) ? $codes[$status] : ''; } // Helper method to send a HTTP response code/message function sendResponse($status = 200, $body = '', $content_type = 'text/html') { $status_header = 'HTTP/1.1 ' .

$status .

' ' .

getStatusCodeMessage($status); header($status_header); header('Content-type: ' .

$content_type); echo $body; } class InventoryAPI { function getInventory() { $inventory = array( array("Name"=>"Hamburger","Price"=>0.99,"Image"=>"food_hamburger.png"), array("Name"=>"Cheeseburger","Price"=>1.20,"Image"=>"food_cheeseburger.png"), array("Name"=>"Fries","Price"=>0.69,"Image"=>"food_fries.png"), array("Name"=>"Onion Rings","Price"=>0.69,"Image"=>"food_onion-rings.png"), array("Name"=>"Soda","Price"=>0.75,"Image"=>"food_soda.png"), array("Name"=>"Shake","Price"=>1.20,"Image"=>"food_milkshake.png") ); sendResponse(200, json_encode($inventory)); } } sleep(5); $api = new InventoryAPI; $api->getInventory(); ?>

Этот веб-сервис представляет собой очень простой PHP-скрипт, возвращающий массив JSON. Массив содержит так называемые ассоциативный массив (PHP) или словарь (Objective-C), который содержит название, цену и имя изображения элемента.

Единственное, что стоит отметить в приведенном выше коде, — это строка

sleep(5);

.

Я использую его для моделирования медленного веб-сервиса, чтобы лучше показать, как блоки могут помочь в асинхронных операциях.

Вы можете скопировать этот код в файл с расширением .

php и разместить его на своем хостинге или просто использовать мой .



Что делать дальше

Проект к этой части урока можно скачать Здесь .

Ну, здесь было много вещей, не имеющих ничего общего с блоками.

Но теперь, установив вид И веб-сервис , мы можем перейти к кодированию, где мы будем использовать блоки, чтобы сделать наше приложение полностью функциональным.

Теги: #разработка для iOS #objective-c #перевод #Разработка для iOS #objective-c

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.