Как активировать клавиатуру из UITextView на (вторичном) UIWindow

В моем приложении для iPhone (на основе «приложения единого просмотра» Xcode) есть UITextView (скажем: myTextView), который я хочу, чтобы пользователь мог редактировать. Я устанавливал его как редактируемый, и все работало нормально (мне даже не пришлось вызывать статьFirstResponder).

Затем я переместил его в другой UIWindow (скажем: newWindow) (поверх основного / корневого / ключевого, который называется self.window (в приложении единого просмотра)).

Но теперь, когда я нажимаю на UITextView, клавиатура не отображается.

Все работает, если я сделаю так:

[myTextView setEditable: ДА];
[myTextView становитсяFirstResponder]; // некрасиво ... и мне это не нужно, но я добавил на всякий случай ...
[self.window addSubview: newWindow];

но клавиатура отображается сразу (так как я установил статьFirstResponder), что нехорошо. Но если я удалю строку beginFirstResponder, клавиатура не будет показывать вообще!

Если я переместу строку [self.window addSubview: newWindow] выше, то, что бы я ни делал, клавиатура не активируется ...

[self.window addSubview: newWindow]; // так и должно быть ... но,
[myTextView setEditable: YES];
[myTextView статьFirstResponder]; // даже когда я ввожу это, он не работает :-(

Я ничего не пробовал [newWindow makeKeyAndVisible]. Я попытался добавить делегата касания и обнаружить касание (или жест) в UITextView, они работают (я получаю сообщение NSLog, которое я включил), но опять же, без клавиатуры. Я даже попытался добавить еще одно поле (главного окна) поверх newWindow (чтобы сверху был элемент главного окна), но все равно не повезло ...

Что мне не хватает?


person Gik    schedule 12.04.2012    source источник


Ответы (1)


Вы не должны добавлять UIWindow в качестве подпредставления. Вместо этого окна отображаются либо путем вызова - [UIWindow makeKeyAndVisible], либо - [UIWindow setHidden: NO], если вы не хотите, чтобы он получал ключевые события.

Однако редко бывает необходимо использовать несколько окон. Просто используйте обычный UIView, добавьте добавление, что во многих случаях подойдет подвид.

РЕДАКТИРОВАТЬ: Раньше у меня было сбивающее с толку замечание о «назначении на экран». UIWindow имеет свойство «screen», которому вы можете назначить, если вы хотите отображать окно на другом экране, а не на основном экране. Однако вам не нужно беспокоиться об этом для вашего варианта использования.

person nevyn    schedule 25.04.2012
comment
назначить экран окну ... Что ты имеешь в виду? Как? Я понял первую часть вашего комментария, но не вторую. Я должен добавить myTextView в другое представление (в качестве подпредставления), чтобы сгруппировать их, как я понимаю. Но не назначать экран оконной части. - person Gik; 03.05.2012