Как вы можете создать аксессуарInputView в дизайне раскадровки?

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

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

Я не могу понять, как создать новое представление и связать его с textView. Является ли это возможным?


person Charlie    schedule 13.11.2013    source источник


Ответы (2)


Вы можете проверить этот пример проекта от Apple: https://developer.apple.com/library/ios/samplecode/KeyboardAccessory/Introduction/Intro.html

Чтобы добиться того же результата, что и в примере, вы должны перетащить экземпляр UIView в окно «Структура документа», когда ваша раскадровка открыта.

Это окно слева.

Затем вам нужно создать IBOutlet в вашем контроллере для доступа к представлению и установить его как inputAccessoryView.

введите описание изображения здесь

person RoaflinSabos    schedule 18.06.2016
comment
Этот ответ - скрытая жемчужина. Также какой другой способ использовать представление из раскадровки. - person mkeremkeskin; 04.03.2020

На случай, если кто-то еще попытается это сделать, позвольте мне записать, что я в итоге сделал.

Я создал новый XIB с нужным мне аксессуаром. Я не мог понять, как назначить inputAccessoryView непосредственно в дизайн раскадровки, поэтому я сделал следующее.

Я сделал fileOwner XIB в качестве класса контроллера, который содержит textView, которому нужен аксессуарView, и назначил представление IBOutlet в этом классе. Это позволяет мне загружать XIB и автоматически назначать его IBOutlet.

Затем в viewDidLoad я назначаю IBOutlet тому textView, которому он нужен. Он хорошо работает и позволяет мне выполнять всю работу с пользовательским интерфейсом в IB и сохранять логику в контроллере. Думаю, я могу рассмотреть возможность установки inputAccessoryView как «логики», а не дизайна пользовательского интерфейса, и считать это хорошим дизайном. Не звездный, так как IB не позволяет устанавливать inputAccessoryView непосредственно из XIB или создавать представления в раскадровке, которые не являются частью потока приложения.

Код в viewDidLoad выглядит так:

- (void) viewDidLoad
{
    ...   
    [super viewDidLoad];
    [[NSBundle mainBundle] loadNibNamed:@"NoteInputAccessoryView" owner:self options:nil];

    _noteTextView.inputAccessoryView=_noteInputAccessoryView;
    ...
}
person Charlie    schedule 04.12.2013
comment
Просто не уверен, что мне нужно делать это для 3 кнопок:/ - person Rudiger; 18.03.2015
comment
Вы можете назначить один и тот же inputAccessoryView нескольким кнопкам. - person Diziet; 25.03.2015
comment
создайте образец в GitHub, чтобы проиллюстрировать лучший способ - person Lion; 18.07.2018