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

В моем приложении для iPhone (основанном на "Single View Application" Xcode) есть UITextView (скажем, myTextView), который я хочу, чтобы пользователь мог редактировать. Я установил его в редактируемый, и все работало нормально (мне даже не нужно было вызывать становление становления отклика).

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

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

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

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

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

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам