Пользовательские представления для ввода данных

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 протокол:

  1. В Вашем проекте XCode создайте подкласс UIView класс. В заголовочном файле укажите, что подкласс соответствует UIInputViewAudioFeedback протокол, следующим образом:

    @interface KeyboardAccessoryView : UIView <UIInputViewAudioFeedback> {
    }
  2. В файле реализации для Вашего UIView подкласс, реализуйте enableInputClicksWhenVisible метод, следующим образом:

    - (BOOL) enableInputClicksWhenVisible {
        return YES;
    }
  3. Наконец, в Интерфейсном документе Разработчика для Вашего пользовательского ввода или представления аксессуара, выберите объект Представления. В инспекторе Идентификационных данных, набор класс для объекта быть Вашим UIView подкласс.

Игра входных щелчков

Для игры входного щелчка для ключевого касания в пользовательском вводе или представлении аксессуара клавиатуры сначала гарантируйте, что представление принимает UIInputViewAudioFeedback протокол, как описано в Принятии Протокола UIInputViewAudioFeedback. Затем для каждого касания, для которого Вы хотите обеспечить звук щелчка, вызовите playInputClick метод UIDevice класс, следующим образом:

- (void) playClickForCustomKeyTap {
   [[UIDevice currentDevice] playInputClick];
}

Система автоматически управляет аудио сеансом для пользовательских входных щелчков, включая аудио, ныряющее по мере необходимости. (Для получения информации об аудио сеансах см. Аудио Руководство по программированию Сеанса.)