2009-06-24 4 views
6

Я перемещаю вид предупреждения немного выше, поэтому я могу поместить клавиатуру на экран. Я просто делаю это, захватывая рамку предупреждения и меняя Y после того, как я уже показал предупреждение, чтобы переменные фрейма были законными. Это отлично работает на симуляторе, но когда я делаю это на аппаратном обеспечении, предупреждение начинается в правильном положении, но затем почти сразу же переходит к исходному вертикальному центральному месту. Является ли позиция UIAlertView фиксированной, которая не должна изменяться в соответствии с рекомендациями по удобству использования или я просто делаю что-то неправильно?Могу ли я переместить UIAlertView?

Спасибо!

ответ

22

В какой ОС вы пытаетесь противостоять этому? Я получил эту работу как на тренажере OS 3.0 и OS 3.0 Устройства:

UIAlertView * alert = [ [ UIAlertView alloc ] initWithTitle:@"Alert" message:@"Alert" 
         delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil ]; 

alert.transform = CGAffineTransformTranslate(alert.transform, 0.0, 100.0); 

[ alert show ]; 

CGAffineTransformTranslate принимает три аргумента: преобразование существующего, Х преобразования, и у преобразования. В примере, который я использовал, представление предупреждения появилось на 100 пикселей выше, чем обычно. Попробуйте и посмотрите, что произойдет.

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

+0

Спасибо, что преобразование сделало трюк, по какой-то причине его перемещение с использованием координат кадра было проблемой. – Skyler

+0

он работал для меня в ios 3.0, но по какой-то причине он не работает в ios 4.0 .... –

1

Не является оповещением, который должен быть modal - i.e: вы вообще не выполняли бы какой-либо другой ввод пользователя во время активного оповещения? Если это так, то почему вам нужна видимость клавиатуры?

+3

Если у него есть текстовое поле, добавленное в качестве подсмотра представления предупреждения, имеет смысл хотеть видеть клавиатуру так же, как это делает App Store, когда она запрашивает ваш пароль для iTunes перед загрузкой приложения. – LucasTizma

+0

Спасибо за комментарий - я не думал об этом сценарии. – teabot

2

Поскольку iOS4, перемещающийся по UIAlertViews, становится сложным. Я заметил, что если вы добавите subview UITextField в UIAlertView, на iOS4 предупреждение будет перемещено вверх, чтобы клавиатура не перекрывала его. Этого не происходит < iOS4.

Также я заметил, что рамка предупреждения не инициализируется даже после вызова шоу, поэтому нет простого программного способа сделать относительную CGAffineTransformation. Единственным решением было бы выполнение условных преобразований на основе версии ОС.

Для меня это похоже на нарезку над недокументированным поведением UIAlertViews, которое может быть изменено в любое время. Я не думаю, что Apple предназначалась для того, чтобы мы использовали предупреждения для чего-то большего, чем тексты и кнопки (даже если их собственные приложения нарушают это правило).

I для одного начнет создавать собственные пользовательские оповещения для этого типа сценариев.

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