Могу ли я переместить UIAlertView? - PullRequest
6 голосов
/ 24 июня 2009

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

Спасибо!

Ответы [ 3 ]

22 голосов
/ 25 июня 2009

С какой ОС вы пытаетесь это сделать? Я получил это, чтобы работать как на симуляторе 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 принимает три аргумента: существующее преобразование, преобразование x и преобразование y. В примере, который я использовал, представление предупреждений оказалось на 100 пикселей выше, чем обычно. Попробуйте и посмотрите, что получится.

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

2 голосов
/ 28 октября 2010

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

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

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

Я, например, начну создавать собственные настраиваемые оповещения для сценариев этого типа.

1 голос
/ 24 июня 2009

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

...