Я не могу разобраться - (void) playInputClick; - PullRequest
5 голосов
/ 29 июля 2011

У меня есть inputAccessoryView для настройки UITextField, которая загружается из XIB при необходимости (точно так же, как в примере с Apple KeyboardAccessory).

Я пытаюсь заставить кнопки на немнажмите при нажатии с помощью функции playInputClick, но я не могу понять, как.В документации Apple говорится, что мне нужно добавить метод добавления делегата в представление, но представление было создано исключительно в конструкторе интерфейсов, поэтому я не вижу, как я могу это сделать.

Кто-нибудь знает, как заставить это работать?Похоже, что нигде в Интернете нет примера кода этого метода.

Ответы [ 3 ]

4 голосов
/ 17 сентября 2011

У меня была такая же проблема, и я наконец-то понял.

Если вы реализуете протокол в UIViewController, он не работает. Это должно быть реализовано в подклассе UIView.

Итак, чтобы заставить его работать, я создал представление в конструкторе интерфейсов с контроллером представления. Затем я добавил еще один класс, который является подклассом UIView. Этот класс реализует протокол UIInputViewAudioFeedback. Затем в конструкторе интерфейса я пошел в инспектор Identity моего представления и изменил класс на свой подкласс UIView, который реализует протокол UIInputViewAudioFeedback. И звук щелчка клавиатуры теперь работает.

Мой контроллер представления все еще вызывает [[UIDevice currentDevice] playInputClick], все, что я сделал, это переместил код для протокола UIInputViewAudioFeedback в подкласс UIView и установил для моего класса представлений мой подкласс UIView.

4 голосов
/ 15 мая 2013

Предполагается, что вы пытаетесь сделать это в inputAccessoryView:

В файле .h укажите, что вы реализуете UIInputViewAudioFeedback

@interface YourAcessoryView : UIView <UIInputViewAudioFeedback>

В файле .m, добавьте этот метод для удовлетворения протокола

- (BOOL)enableInputClicksWhenVisible {
    return YES;
}

Когда кнопка нажата, сделайте что-то вроде:

- (void)buttonPressed:(UIButton*)sender
{
    [[UIDevice currentDevice] playInputClick];
    // do more stuff
}
0 голосов
/ 29 июля 2011

Вам необходимо реализовать класс контроллера представления и в конструкторе интерфейса назначить владельца файлов в качестве этого класса. Соедините представление контроллера представления с вашим представлением.

Как только вы это сделаете, вы можете реализовать делегат в контроллере представления. Это довольно просто и прямо. По сути, ваше представление будет членом класса контроллера представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...