Пользовательские представления для ввода данных
UIKit позволяет приложениям заменять пользовательскими входными представлениями системную клавиатуру. Это также позволяет приложениям иметь вспомогательное представление выше системной клавиатуры или пользовательское входное представление. Когда пользователи касаются на средства управления входного представления или вводят представление аксессуара, Кроме того, это позволяет приложениям играть звуки щелчка клавиши.
Входные представления и входные представления аксессуара
Платформа UIKit включает поддержку пользовательских входных представлений и ввела представления аксессуара. Когда пользователи редактируют текст или другие формы данных в представлении, Ваше приложение может заменить своим собственным входным представлением системную клавиатуру. Например, приложение могло использовать пользовательское входное представление для ввода символов от рунического алфавита. Можно также присоединить входное представление аксессуара к системной клавиатуре или к пользовательскому входному представлению; этот вспомогательный выполнения представления вдоль вершины основного входного представления и могут содержать, например, средства управления, влияющие на текст в некотором роде или метки, выводящие на экран некоторую информацию о тексте.
Получить эту функцию, если Ваше приложение использует UITextView
и UITextField
объекты для редактирования текста, просто присвойте пользовательские представления inputView
и inputAccessoryView
свойства. Когда текстовый объект становится первым респондентом, те пользовательские представления показаны.
Вы не ограничиваетесь, чтобы ввести представления и ввести представления аксессуара в предоставленных платформу текстовых объектах. Любой класс, наследовавшийся прямо или косвенно от UIResponder
(обычно пользовательское представление), может указать его собственное входное представление и ввести представление аксессуара. UIResponder
класс объявляет два свойства для входных представлений и ввел представления аксессуара:
@property (readonly, retain) UIView *inputView; |
@property (readonly, retain) UIView *inputAccessoryView; |
Когда объект респондента становится первым респондентом и inputView
(или inputAccessoryView
) не nil
, UIKit анимирует входное представление в место ниже родительского представления (или присоединяет входное представление аксессуара к вершине входного представления). Первый респондент может перезагрузить ввод и представления аксессуара путем вызова reloadInputViews
метод UIResponder
.
UITextView
класс повторно объявляет inputView
и inputAccessoryView
свойства как readwrite
. Клиенты UITextView
объекты должны только получить ввод и представления входного аксессуара — или путем загрузки файла пера или создания представлений в коде — и присвоить их их свойствам. Пользовательские классы представления (и другие подклассы, наследовавшиеся от UIResponder
) должен повторно объявить один или оба из этих свойств и их переменных экземпляра поддержки и переопределить метод получателя для свойства — т.е. не синтезируйте методы доступа свойств. В их реализациях метода получателя они должны возвратить его представление, загрузившись или создав его, если это уже не существует.
Вы имеете большую гибкость в определении размера и содержания входного представления или вводите представление аксессуара. Несмотря на то, что высота этих представлений может быть тем, что Вы хотели бы, они должны быть той же шириной как системная клавиатура. Если UIKit встречается с входным представлением с a UIViewAutoresizingFlexibleHeight
значение в его маске автоизменения размеров, это изменяет высоту для соответствия клавиатуры. Нет никаких ограничений на число подпредставлений (таких как средства управления), которые вводят представления и вводят представления аксессуара, может иметь. Для большего руководства на входных представлениях и входных представлениях аксессуара, см. Инструкции по Интерфейсу пользователя iOS.
Для загрузки файла пера во время выполнения сначала создайте входное представление или введите представление аксессуара в Интерфейсном Разработчике. Тогда во время выполнения получают основной пакет и вызов приложения loadNibNamed:owner:options:
на нем, передавая имя файла пера, Владельца Файла для файла пера и любых опций. Этот метод возвращает массив объектов верхнего уровня в пере, включающем входное представление или вводящем представление аксессуара. Присвойте представление его соответствующему свойству. Для больше на этом предмете, посмотрите Файлы Пера в Руководстве по программированию Ресурса.
Перечисление 7-1 иллюстрирует пользовательский класс представления, лениво создающий его входное представление аксессуара в inputAccessoryView
метод получателя.
Перечисление 7-1 , Создающее входной аксессуар, просматривает программно
- (UIView *)inputAccessoryView { |
if (!inputAccessoryView) { |
CGRect accessFrame = CGRectMake(0.0, 0.0, 768.0, 77.0); |
inputAccessoryView = [[UIView alloc] initWithFrame:accessFrame]; |
inputAccessoryView.backgroundColor = [UIColor blueColor]; |
UIButton *compButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; |
compButton.frame = CGRectMake(313.0, 20.0, 158.0, 37.0); |
[compButton setTitle: @"Word Completions" forState:UIControlStateNormal]; |
[compButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; |
[compButton addTarget:self action:@selector(completeCurrentWord:) |
forControlEvents:UIControlEventTouchUpInside]; |
[inputAccessoryView addSubview:compButton]; |
} |
return inputAccessoryView; |
} |
Подпредставления входного представления аксессуара представления и ввода могут быть чем-либо, что Вы хотите. Если они - кнопки или другие средства управления, необходимо указать цели и действия для каждого управления и реализовать связанные методы действия выполнить ввод данных или манипулирование.
Так же, как это делает с системной клавиатурой, сообщениями UIKit UIKeyboardWillShowNotification
, UIKeyboardDidShowNotification
, UIKeyboardWillHideNotification
, и UIKeyboardDidHideNotification
уведомления. Объект, наблюдая эти уведомления может получить информацию геометрии, связанную с входным представлением и вводить представление аксессуара и корректировать отредактированное представление соответственно. Посмотрите Клавиатуры и Методы ввода для примеров и соответствующей информации.
Игра входных щелчков
Когда пользователь касается в пользовательских входных представлениях и представлениях аксессуара клавиатуры, можно играть стандартные системные щелчки клавиатуры. Во-первых, примите UIInputViewAudioFeedback
протокол в Вашем входном представлении. Затем вызовите playInputClick
метод при ответе на ключевое касание в представлении.
Принятие протокола UIInputViewAudioFeedback
Выполните выполняющий трех шагов для принятия UIInputViewAudioFeedback
протокол:
В Вашем проекте XCode создайте подкласс
UIView
класс. В заголовочном файле укажите, что подкласс соответствуетUIInputViewAudioFeedback
протокол, следующим образом:@interface KeyboardAccessoryView : UIView <UIInputViewAudioFeedback> {
}
В файле реализации для Вашего
UIView
подкласс, реализуйтеenableInputClicksWhenVisible
метод, следующим образом:- (BOOL) enableInputClicksWhenVisible {
return YES;
}
Наконец, в Интерфейсном документе Разработчика для Вашего пользовательского ввода или представления аксессуара, выберите объект Представления. В инспекторе Идентификационных данных, набор класс для объекта быть Вашим
UIView
подкласс.
Игра входных щелчков
Для игры входного щелчка для ключевого касания в пользовательском вводе или представлении аксессуара клавиатуры сначала гарантируйте, что представление принимает UIInputViewAudioFeedback
протокол, как описано в Принятии Протокола UIInputViewAudioFeedback. Затем для каждого касания, для которого Вы хотите обеспечить звук щелчка, вызовите playInputClick
метод UIDevice
класс, следующим образом:
- (void) playClickForCustomKeyTap { |
[[UIDevice currentDevice] playInputClick]; |
} |
Система автоматически управляет аудио сеансом для пользовательских входных щелчков, включая аудио, ныряющее по мере необходимости. (Для получения информации об аудио сеансах см. Аудио Руководство по программированию Сеанса.)