2012-03-02 4 views
2

У меня есть этот код:UIView не отображается над клавиатурой?

JMenuController *menuController = [[JMenuController alloc] init]; 
    NSArray *buttonsArray = [NSArray arrayWithObjects:@"From Libary", @"Take Photo or Video", nil]; 
    [menuController showMenuWithTitle:@"Add Media" ButtonTitles:buttonsArray animated:YES]; 
    self.currentMenuType = JCreateMenuTypeNewMedia; 

    [[[[UIApplication sharedApplication] delegate] window] addSubview:menuController]; 

Проблема заключается в том, вид появляется под клавиатурой, которая уже находится на экране. Как это исправить?

+1

Напугало какое-то время, я подумал, что Oracle представила «UISwing»! – doNotCheckMyBlog

ответ

1

Хорошо, мне потребовалось некоторое время, чтобы понять, что вы хотели сделать. У вас есть 2 варианта.

  • Сбросьте клавиатуру и покажите представление с помощью кнопок.

  • Используйте панель UIActionSheet, чтобы отображать кнопки на клавиатуре, как в приложении «Сообщения», когда вы нажимаете на камеру, чтобы отправить изображение кому-то.

Я бы порекомендовал позже.

Edit: Взгляните на это для пользовательских UIActionSheet Show a view over the keyboard

+0

Я по существу сделал свой собственный лист действий, а не использовал его по умолчанию. Поэтому я хочу скопировать поведение UIActionSheet. – Andrew

+0

@ Andrew Я обновил свой ответ – Bot

1

Клавиатура существует в своем собственном окне. Чтобы все поделать, вам нужно либо поместить вещи в окно клавиатуры (это не поддерживается), либо создать еще одно окно и поместить его поверх клавиатуры.

+0

Как мне это сделать? – Andrew

+0

См. Ответ samvermette. –

7

Самый простой способ отобразить некоторый вид на верхней части клавиатуры положить, что вид внутри UIWindow, для которого установить windowLevel свойство UIWindowLevelAlert. Что-то вроде:

UIView *myView = [[UIView alloc] initWithFrame:rect]; 

UIWindow *myWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 
myWindow.windowLevel = UIWindowLevelAlert; 
[myWindow addSubview:myView]; 

[myWindow makeKeyAndVisible]; 

Если вы используете ARC, убедитесь, что вы держите сильную ссылку на MyWindow. В противном случае он автоматически будет выпущен и поэтому не будет добавлен в ваши окна приложений.

(Это как UIActionSheet и UIAlertView работать внутри. Когда один из них видно, посмотрите на [UIApplication sharedApplication] .windows, и вы увидите, что они создают окна с их windowLevel установлен UIWindowLevelAlert.)

+0

Спасибо! то мне также нужно скрыть его с помощью '[myWindow setHidden: YES];' – Nianliang

+0

Спасибо! Это сработало для меня, но как только я отклоняю представление, я не могу взаимодействовать с моим пользовательским интерфейсом. Также в Клавиатуре есть поведение в режиме стартажа. Мой фокус все еще находится в UItextField, и если я нажимаю любую клавишу, в моем текстовом поле нет изменений, но если я нажму на клавишу, то мой текст будет удален. – JiteshW

+0

Это больше не работает для iOS 9 :( – Daniel

Смежные вопросы