UIView не появляется над клавиатурой? - PullRequest
2 голосов
/ 02 марта 2012

У меня есть этот код:

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];

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

Ответы [ 3 ]

7 голосов
/ 02 марта 2012

Самый простой способ отобразить некоторое представление поверх клавиатуры - поместить это представление в 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.)

1 голос
/ 02 марта 2012

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

  • Переустанавливать клавиатуру и показывать вид кнопками.

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

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

Edit: Взгляните на это для своего пользовательского UIActionSheet Показать вид с клавиатуры

1 голос
/ 02 марта 2012

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

...