Компоненты использующие клавиатуру
Компоненты, использующие клавиатуру, вызывают ее на экран.
Когда пользователь щелкает в текстовом поле, iOS передает элементу фокус и назначает его «первым ответчиком» для последующих событий. Компонент может получить фокус по разным причинам: пользователь выделяет элемент, или представление настроено так, что при нажатии кнопки Return фокус переходит к следующему элементу для заполнения, или приложение напрямую назначает некоторый элемент первым ответчиком вследствие некоторого события и т. д. Однако действия, выполняемые компонентом при назначении первым ответчиком, зависят от самого компонента: в частности, элемент UITextField обращается к iOS с запросом на отображение клавиатуры. Взаимодействия между приложением и компонентами играют важную роль при написании приложений, и все они реализуются посредством передачи сообщений.
Идея проста: когда один объект (будь то объект ApplicationDelegate вашего приложения, другой компонент или GPS в iPhone) хочет, чтобы другой объект выполнил какую-либо операцию, он отправляет последнему сообщение.
В Objective-C вы отправляете сообщения объектам, а они отвечают на сообщения (как правило, возвратом некоторого значения из метода).
Исполнительная среда Objective-C преобразует сообщения в вызовы методов объектов или классов (для статических методов), но вам лучше думать о них именно как о сообщениях; в документации Apple постоянно встречаются выражения типа «получатель этого сообщения делает то-то.» Давайте воспользуемся механизмом передачи сообщений, чтобы убрать клавиатуру с экрана после завершения ввода.
Запрос к UlTextField на передачу фокуса
Чтобы клавиатура исчезла с экрана, необходимо сообщить текстовому полю, что пользователь завершил работу с ним. Для этого мы отправляем UlTextField сообщение с приказом отказаться от роли первого ответчика.
Отправить сообщение в Objective-C несложно: вы указываете получателя, отправляемое сообщение и аргументы, передаваемые с сообщением.
Да! Наш контроллер представления отвечает на определенный набор сообщений (таких, как sendButtonTapped и viewDidLoad).
Когда пользователь нажимает кнопку Done на клавиатуре, текстовое поле отправляет сообщение. Остается указать, что это сообщение представляет интерес для нашего класса контроллера представления и контроллер желает обрабатывать его.
И представление использует этот способ для передачи информации контроллеру?
Сообщения можно отправлять объекту nil.
Objective-C позволяет отправлять сообщения объектам nil. Если вы привыкли к исключениям NullPointerException в других языках, это обстоятельство способно основательно усложнить отладку. Будьте внимательны с неинициализированными переменными и nil во время отладки!
Мы начали заниматься обработкой сообщений в главе 1, но практически не рассматривали синтаксис, обеспечивающий ее работу. Объявления методов размещаются в заголовочных файлах, а реализация — в файлах .т. Перед вами несколько фрагментов реализации sendButtonTapped из приложения InstaEmail.
- Дата: 4-12-2014, 22:43